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)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |