我正在为uni上的IT项目编写一个Space Invaders克隆。所有方法都可以,但是删除敌人时遇到问题。
我重做了代码以使用迭代器。我将敌人存储在敌人的向量(垂直)的向量(水平)中。该代码可以正常工作,直到我每次发射两个以上的弹丸时都出现错误。
if (projectiles.size() != 0)
{
for (auto itr_columns = enemies.begin(); itr_columns != enemies.end(); itr_columns++)
{
for (auto itr_rows = itr_columns->begin(); itr_rows != itr_columns->end();)
{
if (projectiles.size() == 0)
{
break;
}
for (auto itr_projectiles = projectiles.begin(); itr_projectiles != projectiles.end();)
{
if (itr_projectiles->Collision(*itr_rows))
{
itr_projectiles = projectiles.erase(itr_projectiles);
itr_rows = itr_columns->erase(itr_rows);
}
else
{
itr_rows++;
itr_projectiles++;
}
}
}
}
}
那是我得到的错误: 行:if(itr_projectiles-> Collision(* itr_rows))
表达式:无法取消引用超出范围的向量迭代器
答案 0 :(得分:0)
查看说明:
itr_rows = itr_columns->erase(itr_rows);
这样做,您将使处于循环中的 itr_columns 的迭代器无效,该循环确实使用了这些迭代器。
当您处于循环中时,永不调用函数会使迭代器无效。