Question

Je travaille sur un jeu très basique et j'ai une collection d'objets std :: list qui se rapportent à mon jeu. Je l'ai déclaré comme:

std::list<Target> targets;

Quand j'itère dessus, en utilisant

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

Mes objets ne sont pas mis à jour sur l'interface graphique. Cependant, en remplaçant la boucle itérative par un target.front (). Move () , mon seul objet se déplace correctement. Je pense que c'est parce que je ne parcourt pas la collection avec des pointeurs. Quelqu'un peut-il expliquer comment cela est fait? Merci.

Était-ce utile?

La solution

Vous copiez les objets, procédez comme suit:

*iter.move()

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

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

Target &t = *iter;
t.move();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top