Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1290 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1318802
nebaff
Posté le 05-03-2006 à 01:10:37  profilanswer
 

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
mood
Publicité
Posté le 05-03-2006 à 01:10:37  profilanswer
 

n°1318804
Taz
bisounours-codeur
Posté le 05-03-2006 à 01:14:16  profilanswer
 

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

n°1318870
nebaff
Posté le 05-03-2006 à 11:34:27  profilanswer
 

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
n°1318876
Taz
bisounours-codeur
Posté le 05-03-2006 à 11:43:19  profilanswer
 

copie.

n°1318997
nebaff
Posté le 05-03-2006 à 15:08:05  profilanswer
 

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 ?
 

n°1319080
Taz
bisounours-codeur
Posté le 05-03-2006 à 19:02:10  profilanswer
 

ben fais une copie alors ...

n°1319084
nebaff
Posté le 05-03-2006 à 19:08:22  profilanswer
 

?? une copie ?

n°1319111
nebaff
Posté le 05-03-2006 à 20:33:00  profilanswer
 

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.

n°1319156
Taz
bisounours-codeur
Posté le 05-03-2006 à 22:51:27  profilanswer
 

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
n°1319522
nebaff
Posté le 06-03-2006 à 16:08:15  profilanswer
 

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 :)

mood
Publicité
Posté le 06-03-2006 à 16:08:15  profilanswer
 

n°1319704
skelter
Posté le 06-03-2006 à 18:09:47  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Créer un fichier php en php! [résolu]Tester si variable est NULL ? [résolu]
Matcher un nombre inconnu d'arguments[Résolu][RESOLU]Créer une instance Excel à partir de Word 97 ou 2003
[PHP5] fonction qui liste les paramètres d'une méthode de classeProb g++
Liste déroulante dynamique[resolu] pas de rép alors...
[resolu]organisation bddsélection un objet grace à un string
Plus de sujets relatifs à : [RESOLU] PROB liste chainée d'objet push_back()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR