2017-01-18 87 views
-3
void MyScene::bulletTest() { 
    std::vector<Bullet*>::iterator it = bulletVector.begin(); 
    //auto it = std::adjacent_find(bulletVector.begin(), bulletVector.end()); 
    while (it != bulletVector.end()) { 
     std::vector<Enemy*>::iterator that = enemyVector.begin(); 
     //auto that = std::adjacent_find(enemyVector.begin(),`enter code here`enemyVector.end()); 
     while (that != enemyVector.end()) { 
      if ((*it)->isCollidingWith((*that))) { 
       Bullet* b = (*it); 
       this->removeChild(b); 
       it = bulletVector.erase(it); 
       delete b; 

       enemyDeSpawn(); 
      } 
      else 
      { 
       it++; 
      } 
     } 
    } 
} 

我試圖用我的老師來測試我的子彈在我的敵人在引擎構建,本書雖然我不能讓它運行,只要我同時也有更多的拍我的敵人不是dereferencable比場上的一場比賽崩潰。矢量迭代器,側滾動射手

我將連接引擎的源代碼,有興趣的人, https://github.com/rktrlng/rt2d

+0

只是一個想法,也加倍條件你的內部while循環包括相同的條件作爲你的外部while循環。一旦你沒有活躍的子彈,繼續沒有意義。更好的是,假設你的子彈不是多目標感知的,那麼一旦你的子彈已經被使用並且通過擦除「它」被提前,那麼'break'內部while-loop。顯然,以某種方式推進'那*'。 – WhozCraig

回答

0

有該問題可能有兩個原因,你必須:

  1. 你從來沒有在內部循環檢查it == bulletVector.end() ,所以你不知道你是否刪除了bulletVector中的最後一個元素。

  2. 在內環你永遠不更新迭代器that,所以如果修改例如在enemyVectorenemyDeSpawn你可以使其無效。或者至少你會有一個無限循環。

+0

並且這些錯誤會導致嘗試解除引用container.end()迭代器。這就是「向量迭代器不可取消」的意思。 – dmitri