所以我有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;
知道它有什么问题吗?与任何其他碰撞此代码工作
答案 0 :(得分:1)
it1 = gameEntities.erase(it1);
在从向量中删除后,您已正确重置it1
(这可能会使现有迭代器无效)...但您对it
没有做同样的事情,现在可能会失效。
当 无效并且您稍后尝试将其与新it1
进行比较时,您的标准库实现已捕获该错误,并试图告诉您比较无效。在发布版本中,我希望这只是默默地做一些奇怪的事情。