1

我正在开发一个非常基本的游戏,并且我有一个 std::list 与我的游戏相关的对象集合。我将其声明为:

std::list<Target> targets;

当我迭代它时,使用

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

我的对象没有在 GUI 上更新。但是,用 a 替换迭代循环targets.front().move(),我的一个对象会正确移动。我认为这是因为我没有使用指针迭代集合。谁能解释这是怎么做的?谢谢。

4

1 回答 1

4

您正在复制对象,请这样做:

*iter.move()

如果你使用Target t = *iter;你实际上是在复制你的对象并移动它,而不是移动你想要的对象。

正如 xtofl 所说(thx),您也可以获得参考。

Target &t = *iter;
t.move();
于 2009-11-26T12:02:15.450 回答