Вопрос

Я работаю над очень простой игрой, и у меня есть коллекция std :: list объектов, относящихся к моей игре. Я объявил это как:

std::list<Target> targets;

Когда я перебираю это, используя

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

Мои объекты не обновляются в графическом интерфейсе. Однако, заменив итерационный цикл на target.front (). Move () , мой единственный объект перемещается правильно. Я думаю, что это потому, что я не перебираю коллекцию, используя указатели. Кто-нибудь может объяснить, как это делается? Спасибо.

Это было полезно?

Решение

Вы копируете объекты, делайте это следующим образом:

*iter.move()

Если вы используете Target t = * iter; , вы, по сути, делаете копию своего объекта и перемещаете его, а не перемещаете нужный объект.

Как сказал xtofl (thx), вы также можете получить ссылку.

Target &t = *iter;
t.move();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top