Domanda

Sto lavorando a un gioco molto semplice e ho una raccolta di oggetti std :: list che riguardano il mio gioco. L'ho dichiarato come:

std::list<Target> targets;

Quando eseguo l'iterazione su di esso, usando

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

I miei oggetti non si aggiornano sulla GUI. Tuttavia, sostituendo il ciclo iterativo con un target.front (). Move () , il mio unico oggetto si sposta correttamente. Penso che ciò sia dovuto al fatto che non sto ripetendo la raccolta utilizzando i puntatori. Qualcuno può spiegare come è fatto? Grazie.

È stato utile?

Soluzione

Stai copiando gli oggetti, fallo in questo modo:

*iter.move()

Se usi Target t = * iter; stai essenzialmente facendo una copia del tuo oggetto e spostandolo, invece di spostare l'oggetto desiderato.

Come diceva xtofl (thx) puoi ottenere anche il riferimento.

Target &t = *iter;
t.move();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top