C++ 为什么这个函数从迭代器得到错误的参数?

C++ 为什么这个函数从迭代器得到错误的参数?,c++,C++,我正在为uni上的IT项目写一个太空入侵者克隆。所有方法都有效,但我在删除敌人时遇到了问题 我重新编写代码以使用迭代器。我将敌人存储在敌人的向量(水平)或向量(垂直)中。代码工作正常,直到我一次射出2个以上的射弹时,它给了我一个错误 if(projectles.size()!=0) { 对于(自动itr_列=敌人。开始();itr_列!=敌人。结束();itr_列++) { 对于(自动itr_行=itr_列->开始();itr_行!=itr_列->结束();) { if(射弹.size()==0

我正在为uni上的IT项目写一个太空入侵者克隆。所有方法都有效,但我在删除敌人时遇到了问题

我重新编写代码以使用迭代器。我将敌人存储在敌人的向量(水平)或向量(垂直)中。代码工作正常,直到我一次射出2个以上的射弹时,它给了我一个错误

if(projectles.size()!=0)
{
对于(自动itr_列=敌人。开始();itr_列!=敌人。结束();itr_列++)
{
对于(自动itr_行=itr_列->开始();itr_行!=itr_列->结束();)
{
if(射弹.size()==0)
{
打破
}
对于(自动itr_射弹=射弹。开始();itr_射弹!=射弹。结束();)
{
if(itr_投射物->碰撞(*itr_行))
{
itr_射弹=射弹。擦除(itr_射弹);
itr_行=itr_列->擦除(itr_行);
}
其他的
{
itr_行++;
itr_射弹++;
}
}
}
}
}
这就是我得到的错误: 行:如果(itr_投射物->碰撞(*itr_行))


表达式:无法取消引用超出范围的向量迭代器查看指令:

itr_rows = itr_columns->erase(itr_rows);
通过这样做,当您在循环中时,itr\u列的迭代器将失效,而循环使用这些迭代器


不要在循环中调用使迭代器失效的函数。

itr_rows++;嵌套在另一个循环中似乎有点可疑。。。顺便说一句,你会发现很难调试我们无法运行的代码。。。您是否尝试使用valgrind之类的分析器调试器?在尝试实现之前,您是否尝试写下您的算法?是的,我正在使用Visual Studio中的内置调试器。itr_列穿过敌方列,itr_行穿过一列中的行。我把算法写在纸上,它应该能工作。在PC上它可以工作,但在Projectles.size()=2的情况下,在3上它会因为我前面写的错误而崩溃。