Pb erase d'une <list>

Pb erase d'une <list> - C++ - Programmation

Marsh Posté le 16-06-2005 à 14:23:04    

Bonjour,  
j'ai créé une classe template qui utilise la classe <list>  
dans cette classe j'ai une méthode qui me permet de retirer un élément a partir de son rang
j'ai une liste d'element contenant 5 elements
 

Code :
  1. // Attributs
  2.    list<T*> _liste;
  3. // Méthode en question
  4. void retirerObjet(int numero){
  5.     typename std::list<T*>::iterator i = _liste.begin();
  6.     for(int n=numero; n > 0; n--) i++;
  7.     cout << "taille:" << _liste.size()<<"\n";                 // affiche: taille:5
  8.      //i = _list.erase (i);   
  9.     _liste.erase(i);
  10.     cout << "taille:" << _liste.size()<<"\n";                 // affich: taille:4
  11.   }


 
jusque la tout est normal sauf que quand j'appelle ma méthode à partir d'une autre classe

Code :
  1. cout <<"la taille avant:" << _monde->getListeP().tailleListe() <<"\n";              //affiche: "la taille avant:5"
  2.      _monde->getListeP().retirerObjet(2);
  3.      cout <<"la taille apres:" << _monde->getListeP().tailleListe() <<"\n";       // affiche: "la taille apres 5"

 
 
donc ma liste est modifié en local mais pas apres l'apel de ma méthode.
 
Merci à tous ceux qui pourront m'aider ;)


Message édité par manutudescend le 16-06-2005 à 14:23:36
Reply

Marsh Posté le 16-06-2005 à 14:23:04   

Reply

Marsh Posté le 16-06-2005 à 14:31:11    

Laisse moi deviner: getListeP() ne renvoie pas une référence, mais un objet (construit par recopie) ?

Reply

Marsh Posté le 16-06-2005 à 14:33:19    

voici la méthode :  
ListeObjets<Personnage> getListeP() { return _listeP; }

Reply

Marsh Posté le 16-06-2005 à 14:42:07    

Oui, donc à chaque appel de monde->getListeP().tailleListe() tu construit un nouvel objet ListeObjet (qui est une copie du _listeP dans la classe Monde).
 
Si tu veux que tous les appels portent toujours sur le même objet, il faut que tu retournes une référence dans getListeP().
 

Reply

Marsh Posté le 16-06-2005 à 14:44:31    

Merci à toi, je vais essayer ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed