2016-05-25 28 views
0

私は少し問題があります。私はSDLに基づいて2Dゲームを構築する必要があります。VS2015ベクトル反復子は逆参照できません

「シーン」で衝突している2つのオブジェクトを削除しようとすると、このエラーが発生し続けるだけです。

std::vector<WaspObject*>::iterator itw; 
std::vector<ProjectileObject*>::iterator itp; 

for (itp = _projectiles.begin(); itp != _projectiles.end();) 
{ 
    for (itw = _wasps.begin(); itw != _wasps.end();) 
    { 
     if ((*itw)->Get_PositionY() + 37 >= (*itp)->Get_PositionY() + 0 && (*itp)->Get_PositionX()+0 >= (*itw)->Get_PositionX()+0 && (*itp)->Get_PositionX()+0 <= (*itw)->Get_PositionX()+49) 
     { 
      itw = _wasps.erase(itw); 
      itp = _projectiles.erase(itp); 
     } 
     else 
     { 
      itw++; 
      itp++; 
     } 
    } 
} 

_waspsと_projectilesはこのシーンでは標準ベクトルです。

誰かが問題を見つけるのを手助けできますか?前もって感謝します!

答えて

1

ヒットがなく、内側のループにitpを増やした場合は、_projectiles.end()より前に実行される可能性があります。

たとえば、発射体よりも多くの針がある場合。または、最後の発射体にいる場合は、の後に_projectiles.end()に到達します。

両方の内側ループの終了条件をテストするとよいでしょう。

関連する問題