C++ 向量迭代器不兼容。。。但是为什么呢?
我收到消息“向量迭代器不兼容”。我试着把头绕过去,但什么也没有。我以前做过。相同的代码,只是没有在接收“cWORLD*World”的类中使用。我做错了什么 谢谢大家!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
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()
返回的内容的类型很重要,那么您是对的。缩小范围并发布一个。谢谢!你说得对,我必须检查一下如何不归还副本。谢谢!你说得对,我得检查一下如何不归还副本。