向量迭代器不兼容...但是为啥呢?
Posted
技术标签:
【中文标题】向量迭代器不兼容...但是为啥呢?【英文标题】:Vector iterators incompatible... but why?向量迭代器不兼容...但是为什么呢? 【发布时间】:2015-02-03 11:11:53 【问题描述】:我收到消息“向量迭代器不兼容”。我试着把头绕过去,但什么也没有。我以前做过。相同的代码,只是没有在接收“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)
【问题讨论】:
如果您认为从ReturnWorldObjects()
返回的任何内容的类型很重要,那么您是对的。缩小范围并发布MCVE。
【参考方案1】:
看起来ReturnWorldObjects
返回向量的副本,而不是引用。在这种情况下,您正在尝试比较不同对象的迭代器,这不是标准检查的,但可以通过检查迭代器检查(在这种情况下,我认为它是 MSVC 检查迭代器)。
【讨论】:
谢谢!你是对的,我将不得不检查如何不退回副本。【参考方案2】:就像@ForEveR 已经提到的那样,您可能会在函数ReturnWorldObjects()
中返回一个向量的副本。没有看到这个方法的声明,我只能假设它类似于vector<cOBJECT*> ReturnWorldObject();
我认为您可以通过 2 个解决方案来解决这个问题:
1.返回对 World 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++)
...
...
【讨论】:
以上是关于向量迭代器不兼容...但是为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章