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;
  }
}

但我收到错误“列表迭代器不可递增”。我之前遇到过这个错误,但这次我似乎无法修复它。

4

1 回答 1

0

当您刚刚消除最后一个敌人时,很可能会发生这种情况。在这种情况下,erase 返回 end() 并且 e 不能再增加。

if (e != enemys_.end())
  ++e;
于 2013-12-13T22:42:53.023 回答