我收到消息" Vector迭代器不兼容"。我试图绕过它,但没有。我之前做过。相同的代码,仅用于接收" cWORLD * World"的类中。我做错了什么?
谢谢!
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)
答案 0 :(得分:3)
看起来ReturnWorldObjects
会返回vector的副本,而不是引用。在这种情况下,您尝试比较不同对象的迭代器,这些迭代器未经标准检查,但可以通过已检查的迭代器进行检查(在这种情况下,我认为它是MSVC检查的迭代器)。
答案 1 :(得分:1)
就像已经提到的@ForEveR一样,你可能会在函数ReturnWorldObjects()
中返回一个向量的副本。如果没有看到这种方法的声明,我只能假设它是vector<cOBJECT*> ReturnWorldObject();
我认为你可以用2个解决方案解决这个问题:
<强> 1。返回世界级
中向量的引用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++)
{
...
}
...