《遊戲編程入門》源代碼修正 2

《遊戲編程入門》這書不錯~~~

但是 人無完人 有錯誤很正常。

DKink|棼紫

原來的 代碼是

void GameEngine::CleanupSprites()
{
  // Delete and remove the sprites in the sprite vector
  vector<Sprite*>::iterator siSprite;
  for (siSprite = m_vSprites.begin(); siSprite != m_vSprites.end(); siSprite++)
  {
    delete (*siSprite);
    m_vSprites.erase(siSprite);
    siSprite--;
  }
}

這個是清除Sprite 的 代碼,注意,這個 本身 沒什麼錯誤,但是m_vSprites.erase(siSprite);
執行過後iterator就無效了,VC6,VS2003,DEV C++都能正常編譯,但是vs2008下就不行了

修改後的代碼爲

void GameEngine::CleanupSprites()
{
  // Delete and remove the sprites in the sprite vector
  vector<Sprite*>::iterator siSprite;
  for (siSprite = m_vSprites.begin(); siSprite != m_vSprites.end(); siSprite++)
  {
    delete (*siSprite);
  }
  m_vSprites.clear();
}
//=================================================
//或
void GameEngine::CleanupSprites()
{
 // Delete and remove the sprites in the sprite vector
 vector<Sprite*>::iterator siSprite;
 for (siSprite = m_vSprites.begin(); siSprite != m_vSprites.end();)
 {
  delete (*siSprite);
  siSprite = m_vSprites.erase(siSprite);
 }
}

//=====================================================
似乎 VS2008 的要求 更加 嚴格了~

發佈了23 篇原創文章 · 獲贊 10 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章