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

Blu*_*jay 3 c++ foreach for-loop c++11

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

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

在我的PowerUpManager类中,我有一个PowerUp向量,这个函数可以立即更新所有PowerUp:

void PowerUpManager::update(FrameTime mFT) {
  for (auto powerUp : mPowerUps)
    powerUp.update(mFT);
}
Run Code Online (Sandbox Code Playgroud)

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

for (auto powerUp : mPowerUps)
  powerUp.update(mFT);
Run Code Online (Sandbox Code Playgroud)

与更传统但更老式的

for (int i{ 0 }; i < mPowerUps.size(); ++i)
  mPowerUps[i].update(mFT);
Run Code Online (Sandbox Code Playgroud)

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

更奇怪的是,我的所有功能,

void PowerUpManager::draw(sf::RenderWindow& window) {
  for (auto powerUp : mPowerUps)
    powerUp.draw(window);
}
Run Code Online (Sandbox Code Playgroud)

,工作正常,没有问题.

Som*_*ude 12

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

for (auto& powerUp : mPowerUps)
    powerUp.update(mFT);
Run Code Online (Sandbox Code Playgroud)