Ce sont des objets qui composent les listes.
-------------------------------
Réponse au message :
-------------------------------
> Dans les listes STL, le type du template est un objet ou un pointeur vers un objet ?
>
> Kaid -
kaid.fr.st>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > J'ai effectué tous les changements qui s'imposaient malgres cela le probleme persiste.
> > J'ai remarquer que si j 'enlevai les lignes dans le constructeur par recopie et dans la surcharge d'operateur :
> > LTrans= o.LTrans
> > LPlace = o.LPlace
> >
> > La recopie des liste ne se fait plus : on n'a plus d'erreur mais malheureusement nos listes ne sont alors plus recopiées.
> > Comment éviter ce probleme ???
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > - Dans le constructeur, tu alloues de l'espace pour une chaine de caractères mais tu oublies un caractère pour le '\0' final.
> > >
> > > - Même erreur dans l'opérateur d'affectation. De plus, si le membre
Nom de la classe pointe déjà sur quelque chose, il faudrait le libérer pour éviter les fuites mémoires.
> > >
> > > - Quel est le type de ce que tu stockes dans les std::list ?
> > >
> > > Kaid -
kaid.fr.st> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Salut
> > > > c'est l'histoire d'un probleme bizarre (les voies de l'informatique sont impenetrables )
> > > > J'ai un objet RdP avec son constrcucteur par recopie et une surcharge d'operateur=
> > > > Cet objet contient 2 Listes (STL)(LTrans,LPlace). Je veux donc les recopiers dans les 2 cas. Lorsque les deux listes sont recopiees, une autre fonction se met a buguer (Descript()) qui decrit la classe RdP sous la forme d'un string !!! Pour construire ce string j'utilise des methodes Get&Set de mon objet RdP
> > > > Je pense que le probleme viens de là puisque si je n'utilise ni la surcharge = ni le constructeur par recopie dans le main() la fonction descript() ne bugue pas.
> > > > C'est bizarre non ...
> > > > si quelqu'un a une idée ???
> > > > merci .
> > > > (voici le code )
> > > >
RdP::RdP(const RdP& o){> > > > Nom = (char*) malloc(sizeof(char)*strlen(o.Nom));
> > > > strcpy(Nom,o.Nom);
> > > >
/* je recopie les listes ici */> > > > LPlace = o.LPlace;
> > > > LTrans = o.LTrans;
> > > > }
> > > >
> > > >
RdP RdP::operator=(const RdP& o){> > > > Nom = (char*) malloc(sizeof(char)*strlen(o.Nom));
> > > > strcpy(Nom,o.Nom);
> > > >
/* et la */ > > > > LPlace = o.LPlace;
> > > > LTrans = o.LTrans;
> > > >
> > > > return *this;
> > > > }
> > > >
> > > >
string RdP::Descript(){> > > >
> > > > std::string Chaine;
> > > > list<Place>::iterator p;
> > > > list<TransTemp>::iterator t;
> > > > Chaine = "Reseaux de Petri : ";
> > > > Chaine = Chaine + Nom;
> > > >
> > > > /* recapitulation des Places */
> > > > if(LPlace.empty() != true){
> > > > p = LPlace.begin();
> > > >
/* Le Probleme arrive ici */
> > > > // lorsqu'on debug ..... BAM ça saute là
> > > > // alors que sous le debugger on a acces aux elements du RdP
> > > > // on dirait que l'affectation de la chaine bugue à cet endroit précis quoi qu'on fasse
> > > > > > > > Chaine += p->GetNom();
> > > > p++;
> > > > while(p != LPlace.end()){
> > > > Chaine = Chaine + ":";
> > > > Chaine = Chaine + p->GetNom();
> > > > p++;
> > > > }
> > > > }
> > > > .......
> > > >
> > >
>