Связный список const итератор

Я реализовал двусвязный список и создал итератор, который расширяет std::iterator, Я сейчас пытаюсь создать const версия.

Я старался:

typename typedef list_iterator<T_>        iterator;
typename typedef list_iterator<T_> const  const_iterator;

Если я сделаю это, я получу эту ошибку:

error C2678: binary '--' : no operator found which takes a left-hand operand of type 'const    list_iterator<T_>' (or there is no acceptable conversion)

Вот мой operator--:

list_iterator& operator -- ()
{
_current = _current->_previous;
return *this;
}

list_iterator operator--(int) // postfix
{
list_iterator hold = *this;
--*this;
return list_iterator( hold );
}

Если я поставлю

list_iterator operator--() const

… Я не могу изменить значение _current

Как мне сделать так, чтобы мой итератор теперь работал как const_iterator так что из моего связного списка я могу позвонить получить константную версию begin() а также end(), так же как cbegin() а также cend()?

1

Решение

Правильно. Проблема в том, что вы объявили свой const_iterator typedef. (Увидеть Как правильно реализовать пользовательские итераторы и const_iterators? )

Вместо

typename typedef list_iterator<T_> const  const_iterator;

ты хочешь

typename typedef list_iterator<const  T_> const_iterator;
2

Другие решения

Других решений пока нет …