繁体   English   中英

矢量迭代器在课堂上不兼容

[英]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 vectorbar.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM