Векторные итераторы несовместимы в классе - PullRequest
1 голос
/ 12 декабря 2011

У меня есть довольно простой класс с вектором в качестве закрытой переменной, например:

#include "Zombie.h"
#include <vector>

class CGame{
public:
CGame();
void DoVectorStuff();
private:
std::vector<Zombie> zombies;
};

В функции DoVectorStuff () я просто зацикливаюсь на векторе, например:*

Что приводит к тому, что Visual Studio 2010 выдает мне отладочное утверждение при запуске.Тот же самый код работал нормально, когда он был в отдельной функции, я предполагаю, что это связано со мной, добавляя его в класс, но я не могу понять, что.Это ошибка, которую я получаю.

Ответы [ 3 ]

2 голосов
/ 12 декабря 2011

Утверждение, которое вы получаете несовместимые векторные итераторы указывает, что вы пытаетесь сравнить итераторы из разных векторов.

Обычно вы можете получить их по

ВОЗМОЖНОСТЬ 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;
}

Обратите внимание на приведенный выше код, и вы заметите, что я сравниваю iter, который является итератором с foo vector до bar.end()

ВОЗМОЖНОСТЬ 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

1 голос
/ 12 декабря 2011

Wild Guess: Zombie::Update обновляет, помимо прочего, вектор zombies, аннулируя итератор it.Умирают или размножаются зомби во время их Update цикла?

0 голосов
/ 12 декабря 2011

Попробуйте использовать

std::vector<Zombie>::iterator

вместо

std::vector::iterator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...