[英]Vector Iterators Incompatible when in class
我有一个非常简单的类,带有一个向量作为私有变量,如下所示:
#include "Zombie.h"
#include <vector>
class CGame{
public:
CGame();
void DoVectorStuff();
private:
std::vector<Zombie> zombies;
};
在函数DoVectorStuff()中我只是循环遍历向量,如下所示:
for(std::vector<Zombie>::iterator it = zombies.begin(); it != zombies.end(); ++it)
{
it->Update(delta);
}
这导致Visual Studio 2010在运行它时给我一个调试声明。 当同一代码单独存在于函数中时,它可以正常工作,我认为这与将其添加到类中有关,但是我不知道是什么。
编辑: http : //i.imgur.com/xl6Z6.png这是我得到的错误。
您获得向量迭代器不兼容的断言表明您正在尝试比较来自不同向量的迭代器。
通常您可以通过
可能性1
std::vector<int> foo( 100 );
std::vector<int> bar( 100 );
for( std::vector<int>::iterator iter = foo.begin();
iter != bar.end();
++iter )
{
std::cout << *iter;
}
注意上面的代码,您将注意到我正在比较从foo vector
到bar.end()
的迭代器iter
可能性2
获得相同错误的另一种方法是挂在无效的迭代器上。
std::vector<int> foo( 3 );
std::vector<int>::iterator enditer = foo.end();
foo.push_back( 3 );
foo.push_back( 3 );
foo.push_back( 3 ); // can invalidate endIter above
for( std::vector<int>::iterator iter = foo.begin();
iter != enditer;
++iter )
{
std::cout << *iter;
}
注意在上面的代码中我如何挂在endIter上 ,可以通过向foo添加更多元素来使其无效
大胆猜测: Zombie::Update
升级,除其他事项外, zombies
矢量,无效的迭代器it
。 僵尸会在其Update
周期中死亡还是繁殖?
尝试使用
std::vector<Zombie>::iterator
代替
std::vector::iterator
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.