VS2015 矢量迭代器不可取消引用

VS2015 vector iterator not dereferencable

本文关键字:可取消 引用 不可取 迭代器 VS2015      更新时间:2023-10-16

我有一个小问题,我必须基于 SDL 构建一个 2D 游戏。

当我尝试删除在"场景"中碰撞的 2 个对象时,我只是不断收到此错误。

std::vector<WaspObject*>::iterator itw;
std::vector<ProjectileObject*>::iterator itp;
for (itp = _projectiles.begin(); itp != _projectiles.end();)
{
    for (itw = _wasps.begin(); itw != _wasps.end();)
    {
        if ((*itw)->Get_PositionY() + 37 >= (*itp)->Get_PositionY() + 0 && (*itp)->Get_PositionX()+0 >= (*itw)->Get_PositionX()+0 && (*itp)->Get_PositionX()+0 <= (*itw)->Get_PositionX()+49)
        {
            itw = _wasps.erase(itw);
            itp = _projectiles.erase(itp);
        }
        else
        {
            itw++;
            itp++;
        }
    }
}

_wasps和_projectiles是这个场景中的性病载体。

有人可以帮助我找到问题吗?提前感谢!

如果您在内部循环中没有得到任何点击并增加itp,它很可能会超过_projectiles.end()

例如,如果黄蜂比弹丸多。或者,如果您在最后一个弹丸上,您将在一次itp++后到达_projectiles.end().

因此,您可能希望在内循环的每一圈测试两个结束条件。