Pergunta

Eu estou trabalhando em um jogo muito básico e eu tenho uma coleção std :: lista de objetos que pertencem ao meu jogo. I declarou-o como:

std::list<Target> targets;

Quando eu iterar sobre ele, usando

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

Os meus objetos não estão atualizando na GUI. No entanto, substituindo o loop iteração com um targets.front().move(), meus um objeto se move corretamente. Eu acho que isso é porque eu não estou iteração sobre a coleção usando ponteiros. Alguém pode explicar como isso é feito? Obrigado.

Foi útil?

Solução

Você está copiando os objetos, fazê-lo desta maneira:

*iter.move()

Se você usar Target t = *iter; você está fazendo essencialmente uma cópia de seu objeto e movê-lo, em vez de mover o seu objeto pretendido.

Como xtofl disse (THX) você pode obter a referência também.

Target &t = *iter;
t.move();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top