Ошибка при использовании векторного итератора - PullRequest
2 голосов
/ 18 марта 2012

Что ж, в моей программе я создал класс с именем «Переход». Когда я сделал вектор типа перехода с именем delta_. И когда позже в одной из моих функций была реализована реализация класса, в котором я объявил delta_, я попытался использовать итератор с приведенным ниже синтаксисом:

vector<Transition>::iterator it;
it=this->delta_.begin();

я получил эти две ошибки:

В конструкторе `__gnu_cxx :: __ normal_iterator <_Iterator, <em>Контейнер> :: _normal_iterator (const __gnu_cxx :: __ normal_iterator <_Iter, _Container> &) [with _Iter = const Fa :: Transition *, _Iterator = Fa :: Transition *, _Container = std :: vector>] ':

недопустимое преобразование из const Fa::Transition* const' to Fa :: Transition * '

Теперь я действительно понятия не имею, где ошибка. Может кто-нибудь, пожалуйста, помогите !!

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Позвольте мне догадаться, вы делаете it=this->delta_.begin(); в методе const класса, а delta_ является членом класса?

Константность метода гарантирует, что членыкласс не изменится.Но переменная it имеет неконстантный тип iterator, и это дает возможность изменить элемент delta_, который делает защиту поврежденной.

std::vector имеет два перегруженных метода begin()

iterator begin ();
const_iterator begin () const;

Если вы используете begin() в методе, который const, компилятор вызывает второй.

Поэтому вам нужно отказаться от константности метода или использовать const_iterator.

Другой возможный способ, который я не рекомендую из-за размытия константы объекта, - поместить ваш вектор в кучу и работать с указателем на него.

1 голос
/ 18 марта 2012

Либо this, либо delta_ представляется const, в результате чего begin() возвращает const_iterator.

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