[c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Message  aleben89 le Dim 03 Avr 2011, 11:31

Bonjour,

ça fait 2 jours que je planche sur un problème (qui est surement tout bête à résoudre, mais je ne vois pas la solution Sad ).

J'ai une classe qui s'appelle TetraLabel (qui est simplement un tetra graphique). Dans mon observateur, j'essaie de mettre dans mon vecteur 2 TetraLabel, et a ce moment là j'ai le programme qui arrête de s'exécuté Sad.
Voici mon .h de TetraLabel
Code:

/*
 * TetraLabel.h
 *
 *  Created on: 30 mars 2011
 *      Author: aleben
 */

#ifndef TETRALABEL_H_
#define TETRALABEL_H_

#include <QWidget>
#include <QPainter>
#include "moteur/tetra.h"
class Tetra;

class TetraLabel : public QWidget
{
public:
   TetraLabel(Tetra,QWidget * parent);
   TetraLabel(Tetra);
   TetraLabel(const TetraLabel &);
   TetraLabel operator=(const TetraLabel &);

   ~TetraLabel();
protected:
   void paintEvent(QPaintEvent * event);

private:
   Tetra * tetra;
   QWidget * parent;
};

voici mes constructeurs de TetraLabel
Code:

TetraLabel::TetraLabel(Tetra tetra1,QWidget * par):QWidget(par)
{
   parent=par;
   setFixedSize(51,51);
   tetra=new Tetra(tetra1);
}
TetraLabel::TetraLabel(Tetra tetra1)
{
   setFixedSize(51,51);
   tetra=new Tetra(tetra1);
}
TetraLabel::TetraLabel(const TetraLabel & tetraL):QWidget(tetraL.parent)
{
   tetra=new Tetra(*tetraL.tetra);
   setFixedSize(51,51);
}
TetraLabel TetraLabel::operator=(const TetraLabel & tetraL)
{
   QWidget(tetraL.parent);
   tetra=new Tetra(*tetraL.tetra);
   setFixedSize(51,51);
   return * this;
}

voici le .h de mon observateur
Code:

/*
 * ObservateurTetraRestant.h
 *
 *  Created on: 1 avr. 2011
 *      Author: aleben
 */

#ifndef OBSERVATEURTETRARESTANT_H_
#define OBSERVATEURTETRARESTANT_H_

#include "O_SDO/observateur.h"
#include "moteur/TetravexSDO.h"
#include "moteur/tetra.h"
#include "TetraLabel.h"
#include <QVBoxLayout>
#include <QWidget>
#include "Decochable.h"
#include <vector>
using namespace std;

class ObservateurTetraRestant: public QWidget, public Observateur
{
   Q_OBJECT

   public:
      ObservateurTetraRestant(TetravexSDO *);
      void rafraichir(SujetDObservation * sdo);
      void closeEvent(QCloseEvent * e);
      ~ObservateurTetraRestant();

   private:
      TetravexSDO * tetravex;
      TetraLabel * tl;
      Decochable * decochable;

      vector<TetraLabel> tetras;
};

#endif /* OBSERVATEURTETRARESTANT_H_ */


et voici la portion de code qui amène mon problème
Code:

Tetra t('1','1','1','1');

      tetras=vector<TetraLabel>();
      
      tl=new TetraLabel(tetravex->getTetrasNonPlaces()[0],this);
      tetras.push_back(*tl);
      tetras[0].show();
/*
      TetraLabel tz(t);
      tetras.push_back(tz);
*/

Quand je décommente les 2 dernières lignes j'ai mon programme qui plante, j'aimerais savoir pourquoi ?

Merci de votre aide

aleben89


Dernière édition par aleben89 le Mer 06 Avr 2011, 12:12, édité 1 fois

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Message  aleben89 le Dim 03 Avr 2011, 11:52

je pense que je viens de contourner le problème en utilisant pas les vecteurs, par contre, si quelqu'un peut me dire mon erreur, ça fera de moi, je l'espère, un meilleur programmeur Wink

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Message  nvs le Dim 03 Avr 2011, 16:16

faudrait déboguer en laissant tourner jusqu'au plantage et voir la pile des appels de méthodes...

sinon, quand tu appelles vector::push_back(brol), le constructeur de recopie de brol est appelé. je constate que dans ton constructeur par recopie de TetraLabel, l'attribut parent n'est pas initialisé.

enfin, utilises plutôt un vector de TetraLabel *. ça t'éviteras le problème de la recopie, mais surtout le risque de double delete quand le parent des TetraLabel (1) et que le vector de TetraLabel (2) meurent.






cyclops

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Message  aleben89 le Dim 03 Avr 2011, 17:07

merci, je vais essayer de faire avec des pointeurs de tetralabel, par contre, j'ai mingw qui m'en veut, je ne peux plus faire de vecteur.

Code:

/*
 * ObservateurTetraRestant.h
 *
 *  Created on: 1 avr. 2011
 *      Author: aleben
 */

#ifndef OBSERVATEURTETRARESTANT_H_
#define OBSERVATEURTETRARESTANT_H_

#include "O_SDO/observateur.h"
#include "moteur/TetravexSDO.h"
#include "moteur/tetra.h"
#include "TetraLabel.h"
#include <QWidget>
#include <vector>


class ObservateurTetraRestant: public QWidget, public Observateur
{
   Q_OBJECT

   public:
      ObservateurTetraRestant(TetravexSDO *);
      void rafraichir(SujetDObservation * sdo);
      void closeEvent(QCloseEvent * e);
      ~ObservateurTetraRestant();

   private:
      TetravexSDO * tetravex;
      TetraLabel * tl;
      vector<TetraLabel*> tetras;

   signals:
      void masque();
};

#endif /* OBSERVATEURTETRARESTANT_H_ */

il me met le message d'erreur suivant:
Code:

ObservateurTetraRestant.h:33:3: error: 'vector' does not name a type
mingw32-make[1]: *** [debug/ObservateurTetraRestant.o] Error 1
mingw32-make[1]: Leaving directory `C:/Users/aleben/workspace/TetravexGUI'
mingw32-make: *** [debug] Error 2

une idée pour résoudre le problème ?

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Message  smb le Dim 03 Avr 2011, 17:22

@aleben89

std::vector , tu connais ?

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: [c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Message  aleben89 le Dim 03 Avr 2011, 17:27

merci je sors -->[] ... je pense que je vais arrêter pour aujourd'hui, j'ai le cerveau en surchauffe encore merci et désolé pour la question idiote Embarassed

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [c++]Tetravex Probleme vecteur/observateur/TetraGraphique

Message  Contenu sponsorisé Aujourd'hui à 18:54


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum