c++ - 映射/设置删除迭代器超出范围

标签 c++ dictionary sfml

当我在某种状态下关闭我的应用程序时,此代码运行:

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/

相关文章:

c++ - opencv中黑色物体检测HSV范围

c++ - 为什么嵌套的initializer_list会导致内存泄漏

c++ - 使用像素阵列在 SFML 中操作图像

c++ - boost 异常

python - 创建另一个相同类型的对象时,如何复制一个tkinter对象的选项?

c++ - 反向映射值 c++

python - 使用列表遍历字典

c++ - LNK2005 - 在 .hpp 文件中声明函数时出错

c++ - SFML 通过渲染窗口

c++ - 为什么要创建 register 关键字?