Pregunta

Estoy trabajando en un juego muy básico y tengo una colección std :: list de objetos que pertenecen a mi juego. Lo declaré como:

std::list<Target> targets;

Cuando itero sobre él, usando

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

Mis objetos no se actualizan en la GUI. Sin embargo, al reemplazar el bucle iterativo con un targets.front (). Move () , mi único objeto se mueve correctamente. Creo que esto se debe a que no estoy iterando sobre la colección usando punteros. ¿Alguien puede explicar cómo se hace eso? Gracias.

¿Fue útil?

Solución

Estás copiando los objetos, hazlo de esta manera:

*iter.move()

Si usa Target t = * iter; , básicamente está haciendo una copia de su objeto y moviéndolo, en lugar de mover su objeto deseado.

Como xtofl dijo (gracias), también puede obtener la referencia.

Target &t = *iter;
t.move();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top