矢量迭代器不兼容..但是为什么
Vector iterators incompatible... but why?
我收到消息"向量迭代器不兼容"。我试图绕开它,但什么都没有。我以前做过。相同的代码,只是未在接收"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
返回向量的副本,而不是引用。在这种情况下,您正在尝试比较不同对象的迭代器,这些迭代器不是通过标准检查的,但可以通过检查的迭代器进行检查(在这种情况下,我认为是MSVC检查的迭代器)。
就像@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++)
{
...
}
...
相关文章:
- 为什么不;名字在地图上是按顺序排列的吗
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 字符类型转换不兼容
- 该对象具有与成员函数不兼容的类型限定符.为什么会出现此错误?
- 为什么范围算法与 std 的迭代器不兼容?
- 为什么Clang报告与不兼容的类型相同
- 类型 "const char*" 的参数与类型 "char*" 的参数不兼容。但是为什么?:(
- 为什么 const char 数组成员的初始化在构造函数初始值设定项中不兼容
- 为什么函数指针和数据指针在 C/C++ 中不兼容
- 为什么我的函数不跳过尝试解析为不兼容的模板函数,而默认解析为常规函数?
- 为什么"const Eigen::Matrix<>&"和"const Ref<Eigen::Matrix<> >"显然不兼容?
- 类成员容器迭代器在成员函数std::find中不兼容,但为什么不兼容呢
- 矢量迭代器不兼容..但是为什么
- 为什么枚举与 Windows 中的位字段不兼容
- 为什么boost::bind与正向声明不兼容
- 为什么phpseclib生成不兼容的证书
- 为什么迭代器不兼容
- 为什么std::string与C并集不兼容