VS2015矢量迭代器不可解除引用

时间:2016-05-25 08:30:08

标签: c++

我有一点问题,我必须建立一个基于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是此场景中的标准向量。

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

1 个答案:

答案 0 :(得分:1)

如果你没有在内循环中获得任何点击并增加itp,那么它可能会超过_projectiles.end()

例如,如果有更多的黄蜂而不是射弹。或者,如果您使用的是最后一个投射物,那么在_projectiles.end()之后您将到达itp++

所以你可能想在内循环的每个回合测试两个结束条件。