2009-11-26 19 views
1

Je travaille sur un jeu très basique et j'ai une collection d'objets std :: list qui se rapportent à mon jeu. Je déclarai comme:Pointeur pour l'item en itération sur std :: list

std::list<Target> targets; 

Quand j'itérer sur, en utilisant

for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) { 
     Target t = *iter; 
       t.move(); 
} 

Mes objets ne sont pas sur l'interface graphique actualisent. Cependant, en remplaçant la boucle itérée par un targets.front().move(), mon objet se déplace correctement. Je pense que c'est parce que je ne suis pas itérer sur la collection en utilisant des pointeurs. Quelqu'un peut-il expliquer comment cela est fait? Merci.

Répondre

4

Vous copiez les objets, faites-le de cette façon:

*iter.move() 

Si vous utilisez Target t = *iter; vous faites essentiellement une copie de votre objet et le déplacer, au lieu de déplacer votre objet prévu.

Comme xtofl a dit (thx), vous pouvez également obtenir la référence.

Target &t = *iter; 
t.move(); 
+0

Ou utilisez 'Cible & t = * iter;'. – xtofl

+0

Que fait exactement -> faire? Je cherche des pointeurs, et je vois les explications pour & et *, mais pas ->. Merci. – tipu

+8

Ou utilisez 'iter-> move();' –