当我在某种状态下关闭我的应用程序时,此代码运行:
void GameEndState::exit(){
delete m_pGameObjectManager;
delete m_pSceneManager;
}
运行 m_pGameObjectManager 的析构函数后,即:
GameObjectManager::~GameObjectManager(){
std::for_each(gameObjects.begin(),gameObjects.end(),GameObjectDeallocator());
}
//gameObjects is a std::map<sf::String,VisibleGameObject*>
///////////////
struct GameObjectDeallocator{
void operator()(const std::pair<sf::String,VisibleGameObject*>&p) const{
delete p.second;
}
};
它会产生标题的错误。我还没有从谷歌搜索中找到此错误的任何结果。我正在使用 SFML 2.0。
VisibleGameObject 的析构函数:
VisibleGameObject::~VisibleGameObject(){
m_pSceneManager->removeSprite(name);
}
void SceneManager::removeSprite(sf::String spritename){
std::cout << "removed " << std::string(spritename) << std::endl;
sprites.erase(sprites.find(spritename));
}
//sprites is a std::map<sf::String,sf::Sprite>
提前致谢
最佳答案
错误在这一行,显然 sprites.find
没有找到你给它的名字,而是返回 sprites.end()
。
sprites.erase(sprites.find(spritename));
关于c++ - 映射/设置删除迭代器超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435601/