C ++ 11 for循环语法无法正常工作

时间:2014-07-15 14:41:25

标签: c++ c++11 for-loop foreach

我使用SFML作为学习练习制作Arkanoid克隆。对于PowerUp类,我有一个像这样的更新方法:

void PowerUp::update(FrameTime mFT) {
  if (!(bottom() >= windowHeight))
    shape.move(velocity * mFT);
  else
    onGround = true;
}

在我的PowerUpManager类中,我有一个PowerUp向量,此功能可以立即更新所有PowerUp:

void PowerUpManager::update(FrameTime mFT) {
  for (auto powerUp : mPowerUps)
    powerUp.update(mFT);
}

但是,这似乎不起作用。如果我运行这个代码,那么在产生之后,通电就会保持不变,并且不要向下移动,就像它们应该的那样。但是,如果我替换

for (auto powerUp : mPowerUps)
  powerUp.update(mFT);

更传统但更老式的

for (int i{ 0 }; i < mPowerUps.size(); ++i)
  mPowerUps[i].update(mFT);

,一切正常,应该如此。这告诉我这些2位代码的含义有所不同。据我所知,前者只是后者的新C ++语法糖版本。有什么我想念的吗?

甚至更奇怪的是,我的所有功能都是,

void PowerUpManager::draw(sf::RenderWindow& window) {
  for (auto powerUp : mPowerUps)
    powerUp.draw(window);
}

,工作正常,没有任何问题。

1 个答案:

答案 0 :(得分:12)

问题在于循环powerUp是来自mPowerUps容器的副本。您需要使用引用:

for (auto& powerUp : mPowerUps)
    powerUp.update(mFT);