向量迭代器不兼容......但为什么呢?
Vector iterators incompatible... but why?
我收到消息 "Vector iterators incompatible"。我试图绕过它,但什么也没有。我以前做过。相同的代码,只是没有在接收 "cWORLD* World" 的 class 中使用。我做错了什么?
谢谢!
else if (Click[2] == true)
{
//go through objects and check collision
for (vector<cOBJECT*>::iterator it = World->ReturnWorldObjects().begin(); it != World->ReturnWorldObjects().end();)
{
//Check for collision and delete object
if (PointInRect(MouseX + offX, MouseY + offY, (*it)->getrect()) == true)
{
// delete object, delete slot, pick up next slot
delete *it;
it = World->ReturnWorldObjects().erase(it);
}
else
{ // no action, move to next
++it;
}
}//for
}//else if (Click[2] == true)
看起来像 ReturnWorldObjects
returns 矢量的副本,不是参考。在这种情况下,您正在尝试比较不同对象的迭代器,这些迭代器未按标准检查,但可以由已检查的迭代器检查(在这种情况下,我认为它是 MSVC 已检查的迭代器)。
就像@ForEveR 已经提到的那样,您可能 return 函数 ReturnWorldObjects()
中的向量副本。在没有看到此方法的声明的情况下,我只能假设它类似于 vector<cOBJECT*> ReturnWorldObject();
你可以通过 2 个解决方案解决这个问题,我认为:
1. Return 对您世界中向量的引用 Class
const vector<cOBJECT*>& ReturnWorldObjects()
{
return m_vecWorldObjects; // Your vector here
}
2。获取该函数的一个副本并在您的代码中使用它
...
vector<cOBJECT*> worldObjects = World->ReturnWorldObjects();
for (vector<cOBJECT*>::iterator it = worldObjects.begin(); it != worldObjects.end(); it++)
{
...
}
...
我收到消息 "Vector iterators incompatible"。我试图绕过它,但什么也没有。我以前做过。相同的代码,只是没有在接收 "cWORLD* World" 的 class 中使用。我做错了什么?
谢谢!
else if (Click[2] == true)
{
//go through objects and check collision
for (vector<cOBJECT*>::iterator it = World->ReturnWorldObjects().begin(); it != World->ReturnWorldObjects().end();)
{
//Check for collision and delete object
if (PointInRect(MouseX + offX, MouseY + offY, (*it)->getrect()) == true)
{
// delete object, delete slot, pick up next slot
delete *it;
it = World->ReturnWorldObjects().erase(it);
}
else
{ // no action, move to next
++it;
}
}//for
}//else if (Click[2] == true)
看起来像 ReturnWorldObjects
returns 矢量的副本,不是参考。在这种情况下,您正在尝试比较不同对象的迭代器,这些迭代器未按标准检查,但可以由已检查的迭代器检查(在这种情况下,我认为它是 MSVC 已检查的迭代器)。
就像@ForEveR 已经提到的那样,您可能 return 函数 ReturnWorldObjects()
中的向量副本。在没有看到此方法的声明的情况下,我只能假设它类似于 vector<cOBJECT*> ReturnWorldObject();
你可以通过 2 个解决方案解决这个问题,我认为:
1. Return 对您世界中向量的引用 Class
const vector<cOBJECT*>& ReturnWorldObjects()
{
return m_vecWorldObjects; // Your vector here
}
2。获取该函数的一个副本并在您的代码中使用它
...
vector<cOBJECT*> worldObjects = World->ReturnWorldObjects();
for (vector<cOBJECT*>::iterator it = worldObjects.begin(); it != worldObjects.end(); it++)
{
...
}
...