2013-12-13 62 views
0

我目前正在用cinder編寫一個空間射擊遊戲來學習C++。我正在檢查激光和敵人之間的碰撞。列表迭代器檢查對象之間的碰撞時不可增量

void ParticleController::CheckCollisions() 
{ 

    for(std::list<Enemy>::iterator e = enemys_.begin(); e != enemys_.end();) 
    { 
     for(std::list<LaserParticle>::iterator p = laserParticles_.begin(); p != laserParticles_.end();) 
     { 
      if(e->GetBoundingBox().intersects(p->GetBoundingBox())) 
      { 
       e = enemys_.erase(e); 
       p = laserParticles_.erase(p); 
      } 

      else 
      ++p; 
     } 

     ++e; 
    } 
} 

但我得到錯誤「list iterator not incrementable」。我之前有過這個錯誤,但這次我似乎無法修復它。

+0

當您嘗試進一步增加比.END你可能得到這個錯誤() –

+0

@Elliot羅賓遜對這個問題的答案犯規適用於我的情況 –

+0

它應該是在所有的敵人的情況下準確的應用因爲你的'++ e'不是以'e!= enemys_.end()'爲條件的 –

回答

0

當你剛剛清除了最後一個敵人時,很有可能發生這種情況。在這種情況下,擦除返回結束()並且e不能再增加。

if (e != enemys_.end()) 
    ++e;