我正在开发一个非常基本的游戏,我有一个与我的游戏相关的std :: list集合。我宣布它为:

std::list<Target> targets;

当我迭代它时,使用

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

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

有帮助吗?

解决方案

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

*iter.move()

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

正如xtofl所说(thx)你也可以得到参考。

Target &t = *iter;
t.move();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top