[RESOLU] PROB liste chainée d'objet push_back()

PROB liste chainée d'objet push_back() [RESOLU] - C++ - Programmation

Marsh Posté le 05-03-2006 à 01:10:37    

Bonjour  
je transfere des objet d'un vecteur à une liste (je suis obligé -reprise de code)
et j'ai des soucis lorsque j'essaye de récuperer l'objet ajouté (j'ai besoin de stocker sa ref dans un vect qui sera ajouté apres à coté).
 
dnas le hpp de la classe j'ai :

Code :
  1. list<Objet3d> lTriangles;
  2. std::vector<Triangle> triangles;


 
et voici le morceau en question  
 

Code :
  1. list<Objet3d>::iterator iter;
  2.   for(unsigned int i=0; i<points.size();i++){
  3.           Objet3d tempPoint(POINT,points[i].getPos(),
  4.                             points[i].getNormal(),
  5.                             points[i].getColor(),
  6.                             OUT_LINE,
  7.                             points[i].isUp(),
  8.                             points[i].isLeft() );
  9.           lPoints.push_back(tempPoint);
  10.           iter= lPoints.end();
  11.       cout <<"---"<<  *iter<< endl;
  12. }


 
j'ai surchagé le << mais il marche tres bien sur le tempPoint lui meme, mais je n'arrive pas à récuperer mon objet empilé.
merci d'avance
(je viens du java et j'en chie en c++)


Message édité par nebaff le 05-03-2006 à 20:33:56
Reply

Marsh Posté le 05-03-2006 à 01:10:37   

Reply

Marsh Posté le 05-03-2006 à 01:14:16    

#
         iter= lPoints.end();
#
     cout <<"---"<<  *iter<< endl;
 
 
RTFM.
 
cout << lPoints.back()

Reply

Marsh Posté le 05-03-2006 à 11:34:27    

ben désolé mais cette solution me donne toujours un affichage vide :
c à dire que l'affichage du point lui meme donne

Code :
  1. cout << tempPoint<< endl;
  2.      /* affichage correct :
  3. OBJET3d Point (-0.040191, 0.624621, -0.0369695)
  4. Normal(-0.488223, 0.872212, -0.0297256)
  5. type =
  6. */
  7.           lPoints.push_back(tempPoint);
  8.           cout <<"---"<<  lPoints.back()<< endl;
  9. /* affichage mauvais : (le type point et inlne sont par defaut)
  10. ---OBJET3d Point (0, 0, 0)
  11. Normal(0, 0, 0)
  12. type =IN_LINE
  13. */
  14. }


 
je me demandais si le push_back() remplissait la liste avec une copie ou un pointeur vers l'objet ?
mais en fait même si c des references je devrais avoir une liste avec que des pointeurs vers le même objet donc un affichage quand même bon.
 
alors voila je suis dans l'impasseuuu !!


Message édité par nebaff le 05-03-2006 à 11:36:39
Reply

Marsh Posté le 05-03-2006 à 11:43:19    

copie.

Reply

Marsh Posté le 05-03-2006 à 15:08:05    

j'ai fait pas mal de tests et il semblerai que la methode push_back() ajoute un objet vide, car quand je recupere un pointeur sur end() avec l'itérateur et que je lui change des variables l'affichage prend en compte ces  
changements.
 
avec le .back() j'obtiens toujours un point 0,0,0 et je ne peut rien faire car il renvoie une copie.
 
dans tous les tutos que j'ai vu les listes sont toujours utilisé avec des type
 simple (genre int) est-ce le faire de faire ça avec un objet qui fait tout chier ?
 

Reply

Marsh Posté le 05-03-2006 à 19:02:10    

ben fais une copie alors ...

Reply

Marsh Posté le 05-03-2006 à 19:08:22    

?? une copie ?

Reply

Marsh Posté le 05-03-2006 à 20:33:00    

Bon j'ai TROUVEEEEEEEEEEEEEE !!
en fait il fallait lire un peu de doc sur le push_back() qui nous apprend qu'il est nécessaire que l'objet ait un CONSTRUCTEUR PAR RECOPIE
 
ce que n'avait pas ma classe (enfin pas écrit en fait), j'ai complété mon comtructeur par recopie et tout roule.

Reply

Marsh Posté le 05-03-2006 à 22:51:27    

y a que push_back qui en a besoin... et un operator= par la même occasion ...
 
edit: toute classe a un contructeur par recopie, synthétisé par le compilateur s'il le faut. Maintenant je ne vois pas quelle implémentation pourrie de Point tu as pu faire pour que la recopie trivial des membres ne suffise pas.


Message édité par Taz le 05-03-2006 à 22:52:37
Reply

Marsh Posté le 06-03-2006 à 16:08:15    

non mais en fait j'avé préparé le constructeur par reopie mais sans le remplir, ce qui je l'accorde n'est pas tres malin :)

Reply

Marsh Posté le 06-03-2006 à 16:08:15   

Reply

Marsh Posté le 06-03-2006 à 18:09:47    

ne le définie pas si ce n'est pas nécéssaire

Reply

Sujets relatifs:

Leave a Replay

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