检查对象之间的冲突时列表迭代器不可递增

时间:2013-12-13 22:33:24

标签: c++ 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”。我之前有过这个错误,但这次我似乎无法修复它。

1 个答案:

答案 0 :(得分:0)

当你刚刚抹去了最后一个敌人时,很可能会发生这种情况。在这种情况下,erase返回end(),e不能再增加。

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