当我有碰撞检测时,矢量迭代器不兼容

时间:2018-03-29 11:07:30

标签: c++ opengl

所以我有DEBUG_ERROR("矢量迭代器不兼容");每当我在blackHole和amp;之间进行碰撞检测时行星。但是当我在其他任何东西之间进行碰撞检测时,比如小行星和行星或黑色的&小行星,然后它的工作没有问题代码基本相同但但是这个我崩溃了

//Blackhole& Planet Collide
for (vector<Entity*>::iterator it = gameEntities.begin(); it < gameEntities.end(); ++it) // This loop usses an iterator (google c++ iterator) to go through all game entites objects
{
    BlackHole* blackHole1 = dynamic_cast<BlackHole*> (*it); // As the iterator is of generic type Entity we need to convert it to a type we can use, Ball. Dynamic cast performs the conversion only if the entity is actually a Ball otherwise it gives back a null pointer
    if (blackHole1 != nullptr) // we check if the conversion was successful
    {
        for (vector<Entity*>::iterator it1 = gameEntities.begin(); it1 < gameEntities.end(); ++it1) // and we iterate on the remaining elements in the container
        {
            if (it != it1)
            {
                Planet* planet = dynamic_cast<Planet*> (*it1); // we convert the remaining element
                if (planet != nullptr) // check if the conversion happended
                {
                    // collision detection: black hole & planet
                    if (blackHolePlanetCollision(*blackHole1, *planet))
                    {
                        blackHole1->increaseMass(blackHole1->getRadius(), planet->getRadius());
                        delete *it1;
                        it1 = gameEntities.erase(it1);
                        //--it1;

知道它有什么问题吗?与任何其他碰撞此代码工作

1 个答案:

答案 0 :(得分:1)

it1 = gameEntities.erase(it1);

在从向量中删除后,您已正确重置it1(这可能会使现有迭代器无效)...但您对it没有做同样的事情,现在可能会失效。

无效并且您稍后尝试将其与新it1进行比较时,您的标准库实现已捕获该错误,并试图告诉您比较无效。在发布版本中,我希望这只是默默地做一些奇怪的事情。