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

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

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

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

在我的 PowerUpManager 类中,我有一个 PowerUp vector ,这个函数可以同时更新所有 PowerUp:

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

但是,这似乎行不通。如果我运行这段代码, Prop 在生成后会保持静止,不会像它们应该的那样向下移动。但是,如果我更换

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

与更传统但更老式的

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

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

更奇怪的是我的 draw all 函数,

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

,工作正常,没有问题。

最佳答案

问题是在循环中 powerUpmPowerUps 容器的拷贝。您需要使用引用资料:

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

关于C++11 for 循环语法不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761148/

相关文章:

c++ - 在C++中,如何在不使用if语句的情况下选择运行特定的成员函数?

opencv - 从CV_8UC1到OpenCV ConvertTo CV_32SC1

linux - 排除日志中的 grep 文件名

excel - 错误1004遍历范围以获取最大日期

c++ - 在非多线程时避免 std::mutex 的成本?

c++构造函数似乎每次都返回指向同一对象的指针

c++ - C++ 的模块标准是否解决了对调用者隐藏私有(private)数据的问题?

C++11 Lambda 闭包涉及通过引用离开范围的堆栈变量是允许的,但会出现未定义的行为?

c++ - 我可以避免通过 time_t 打印 time_point 吗?

JAVA正确格式化我的成绩簿,其中包含数组中包含的成绩