Добрый день,Задача C++ STD Операторы сравнения итераторов
потому что похоже, что мой не будет так хорош.
У меня есть класс C, который не имеет никаких детей, но имеет вектор, выполненный из указателей на экземпляры другого класса, давайте назовем его B:
class C
{
public:
...
std::vector<B*> elements;
...
}
B также имеет вектор указателей на экземпляры другого класса, давайте назовем его A:
class B
{
public:
...
std::vector<A*> elements2;
...
}
C имеет метод, который перебирает элементы элементов и elements2, и работает так:
std::vector<B*>::iterator it1;
std::vector<A*>::iterator it2;
for (it1=this->elements.begin(); it1!=this->elements.end(); ++it1)
{
for (it2 = it1->elements2.begin(); it12=it1->elements2.end(); ++it2)
{
it2->do_something(); //method of class A
}
}
Но компилятор (g ++) продолжает сообщать мне, что для оператора! = In (иерархия классов) нет соответствия.
Кто-нибудь знает, что я сделал не так? Другие операторы вроде «<», похоже, тоже не работают.
Я не новичок, но я впервые использовал итераторы на C++ (бывший программист на Python), и я не могу понять, что не так с моим кодом.
Спасибо за помощь заранее, я теряю волосы за это!
Редактировать: Я добавляю всю ошибку для справки. Я отредактировал его, чтобы ответить на этот вопрос. Надеюсь, я ничего не испортил:
нет соответствия для 'operator! =' In 'it1! = ((C *) this) -> C :: elements .std :: вектор < _Tp, _Alloc> :: заканчиваются _Tp = B *, _Alloc = станд :: распределителем»
Это была опечатка, я извиняюсь. it1 (внутренний цикл), конечно, должен был быть it2. Он все еще не компилируется. Edit: Я получаю ошибку компилятора перед внутренним циклом, как на внешнем, так и на внутреннем. – Percival
@Percival: answer отредактирован – icecrime
Создание итераторов для концов векторов, по-видимому, отключает проблемы оператора, хотя некоторые другие возникли (возможно, моя ошибка). Интересно, в чем причина этого. Я попытаюсь исправить некоторые другие ошибки. Пока это самый верный ответ. Благодаря! Редактировать: работает отлично. Лучший ответ! – Percival