C++ 向量迭代器不兼容。。。但是为什么呢?

C++ 向量迭代器不兼容。。。但是为什么呢?,c++,pointers,vector,iterator,C++,Pointers,Vector,Iterator,我收到消息“向量迭代器不兼容”。我试着把头绕过去,但什么也没有。我以前做过。相同的代码,只是没有在接收“cWORLD*World”的类中使用。我做错了什么 谢谢大家! else if (Click[2] == true) { //go through objects and check collision for (vector<cOBJECT*>::iterator it = World->ReturnW

我收到消息“向量迭代器不兼容”。我试着把头绕过去,但什么也没有。我以前做过。相同的代码,只是没有在接收“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)
else if(单击[2]==true)
{
//遍历对象并检查碰撞
对于(vector::iterator it=World->ReturnWorldObjects().begin();it!=World->ReturnWorldObjects().end();)
{
//检查碰撞并删除对象
if(PointInRect(MouseX+offX,MouseY+offY,(*it)->getrect())==true)
{
//删除对象,删除插槽,拾取下一个插槽
删除*它;
it=World->ReturnWorldObjects().擦除(it);
}
其他的
{//无操作,请转到下一步
++它;
}
}//为了
}//else if(单击[2]==true)

看起来像
ReturnWorldObjects
返回向量的副本,而不是引用。在本例中,您试图比较不同对象的迭代器,这些迭代器不是由标准检查的,但可以由检查的迭代器检查(在本例中,我认为是MSVC检查的迭代器)。

看起来像
ReturnWorldObjects
返回向量的副本,而不是引用。在本例中,您试图比较不同对象的迭代器,这些迭代器不是标准检查的,但可以由检查迭代器检查(在本例中,我认为是MSVC检查迭代器)。

就像前面提到的@ForEveR一样,您可能在函数
ReturnWorldObjects()
中返回向量的副本。没有看到这个方法的声明,我只能假设它类似于
vector ReturnWorldObject()

我认为,你可以用两种解决方案来解决这个问题:

1。返回对世界级向量的引用

const vector<cOBJECT*>& ReturnWorldObjects()
{
   return m_vecWorldObjects; // Your vector here
}
const vector&ReturnWorldObjects()
{
返回m_vecWorldObjects;//此处为您的向量
}
2。获取该函数的一个副本并在代码中使用它

...
vector<cOBJECT*> worldObjects = World->ReturnWorldObjects();
for (vector<cOBJECT*>::iterator it = worldObjects.begin(); it != worldObjects.end(); it++)
{
   ...
}
...
。。。
vector worldObjects=World->ReturnWorldObjects();
对于(vector::iterator it=worldObjects.begin();it!=worldObjects.end();it++)
{
...
}
...

就像前面提到的@ForEveR一样,您可能会在函数
ReturnWorldObjects()
中返回向量的副本。没有看到这个方法的声明,我只能假设它类似于
vector ReturnWorldObject()

我认为,你可以用两种解决方案来解决这个问题:

1。返回对世界级向量的引用

const vector<cOBJECT*>& ReturnWorldObjects()
{
   return m_vecWorldObjects; // Your vector here
}
const vector&ReturnWorldObjects()
{
返回m_vecWorldObjects;//此处为您的向量
}
2。获取该函数的一个副本并在代码中使用它

...
vector<cOBJECT*> worldObjects = World->ReturnWorldObjects();
for (vector<cOBJECT*>::iterator it = worldObjects.begin(); it != worldObjects.end(); it++)
{
   ...
}
...
。。。
vector worldObjects=World->ReturnWorldObjects();
对于(vector::iterator it=worldObjects.begin();it!=worldObjects.end();it++)
{
...
}
...

如果您认为从
ReturnWorldObjects()返回的内容的类型很重要,那么您是对的。如果您认为从
ReturnWorldObjects()
返回的内容的类型很重要,那么您是对的。缩小范围并发布一个。谢谢!你说得对,我必须检查一下如何不归还副本。谢谢!你说得对,我得检查一下如何不归还副本。