为什么此函数从迭代器得到错误的参数?

时间:2019-06-02 11:55:25

标签: c++

我正在为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))

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

1 个答案:

答案 0 :(得分:0)

查看说明:

itr_rows = itr_columns->erase(itr_rows);

这样做,您将使处于循环中的 itr_columns 的迭代器无效,该循环确实使用了这些迭代器。

当您处于循环中时,永不调用函数会使迭代器无效。