【发布时间】:2012-02-21 04:46:14
【问题描述】:
for(it = gameObjects.begin();it!=gameObjects.end();it++){
it->second->update(frameTime);
if(it->second->getSprite()->GetPosition().y > 500){
std::cout << "Removing enemy" << std::endl;
std::map<sf::String,VisibleGameObject*>::iterator itor = Remove(it->second->getName());
if(itor!=gameObjects.end()){
std::cout << "itor doesn't equal" << std::endl;
it=itor;
}else{
std::cout << "itor = end" << std::endl;
it=itor;
}
}
}
一打印itor = end,就会出错——“map set iterator not incrementable”。我认为 for 循环应该在它再次增加之前结束,因为 it!=gameObjects.end() 在此之后将是错误的。在 else 语句中添加break 即可解决问题。
为什么没有break 就不能工作?我假设与检查条件时相比,迭代器何时递增。
【问题讨论】:
标签: c++ for-loop conditional-statements