首页 > 解决方案 > 为什么这个函数从迭代器中得到错误的参数?

问题描述

我正在为 uni 上的 IT 项目编写 Space Invaders 克隆。所有方法都有效,但我在删除敌人时遇到了问题。

我重做我的代码以使用迭代器。我将敌人存储在 Enemy 的向量(垂直)的向量(水平)中。该代码工作正常,直到我一次发射超过 2 个弹丸时它给我一个错误。

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

这就是我得到的错误: line: if (itr_projectiles->Collision(*itr_rows))

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

标签: c++

解决方案


看说明:

itr_rows = itr_columns->erase(itr_rows);

通过这样做,您在循环中时使itr_columns的迭代器无效,而循环确实使用了这些迭代器。

当您处于循环中时,切勿调用使迭代器无效的函数。


推荐阅读