Pointer für Artikel in Iteration über std :: list
Frage
Ich arbeite gerade an einem sehr einfachen Spiel und ich habe eine std :: Liste Sammlung von Objekten, die zu meinem Spiel betreffen. Ich erklärte es als:
std::list<Target> targets;
Wenn ich über sie iterieren mit
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
Meine Objekte aktualisieren nicht auf der GUI. Um jedoch die iterierenden Schleife mit einem targets.front().move()
ersetzen, mein ein Objekt bewegt sich richtig. Ich denke, das liegt daran, dass ich nicht über die Sammlung Zeiger Iterieren. Kann mir jemand erklären, wie das geschehen ist? Danke.
Lösung
Sie die Objekte kopieren, tun es so aus:
*iter.move()
Wenn Sie Target t = *iter;
Sie sind im Wesentlichen eine Kopie des Objekts erzeugt und bewegt es, anstatt Ihre beabsichtigte Aufgabe zu bewegen.
Wie xtofl sagte (thx) die Referenz als auch erhalten können.
Target &t = *iter;
t.move();