我在C ++中获得了std::list
而且我试图使用
for(Type t : list)
更新每个对象的值的操作。所以我有一个名为球的名单,每个球都有一个位置。循环的代码是:
for(OpenGLView::AssetInstance ball : balls)
ball.position = calculateBallPosition(ball);
其中calculateBallPosition接受球并根据经过的时间返回其新位置。
我遇到的问题是列表中元素的值似乎没有更新。当我在循环运行后检查它们的值时,它与之前的相同。我猜测我的错误在于理解这个循环的工作方式,但我还没有弄清楚如何修复它。
答案 0 :(得分:8)
您正在拍摄原始对象的副本,请使用参考
for(OpenGLView::AssetInstance& ball : balls)
ball.position = calculateBallPosition(ball);
或者只是
for( auto& ball : balls)
ball.position = calculateBallPosition(ball);