我目前正在用煤渣编写太空射击游戏来学习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 :(得分:0)
当你刚刚抹去了最后一个敌人时,很可能会发生这种情况。在这种情况下,erase返回end(),e不能再增加。
if (e != enemys_.end())
++e;