2012-02-24 3 views
0

のうち、消去イテレータを設定タイトルの誤り。私はグーグルでこのエラーの結果を見つけられませんでした。私はSFML 2.0を使用しています。マップ/ Iが一定の状態で私のアプリを閉じると、このコードが実行される範囲

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> 

エラーがこの行にある事前

+2

私はあなたが提供したコードの断片によって生成されるとは思わない。私はここでスニペットの地図の消去を参照してください。 VisibleGameObjectとは何ですか?多分それはデストラクタが消去を呼び出すでしょうか? –

+0

おっと、私はそれらを含めるつもりだった。編集する – pighead10

答えて

5

のおかげで、明らかにsprites.findはあなたがそれを与えてくれたとsprites.end()を返している名前を見つけていません。 (私はそうではありませんだと思うマルチマップを使用していない限り)

sprites.erase(sprites.find(spritename)); 
+0

ああ、それは簡単だった。私は前にgameobjectmnagerのデストラクタを見ていました!ありがとう – pighead10

1

あなたは、単に、キーで消去し、それにイテレータを渡す必要を呼び出していないことがあります。sprites.erase(spritename);はまだこのコードはそれとして非常に良いではありません存在しない要素を消去しようとする可能性があります。だからあなたのために行く:

std::map<sf::String,sf::Sprite>::iterator iter = sprites.find(spritename); 
if (iter != sprites.end()) { 
    sprites.erase(iter); 
} 
関連する問題