Я реализовал двусвязный список и создал итератор, который расширяет 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()
?
Правильно. Проблема в том, что вы объявили свой const_iterator typedef. (Увидеть Как правильно реализовать пользовательские итераторы и const_iterators? )
Вместо
typename typedef list_iterator<T_> const const_iterator;
ты хочешь
typename typedef list_iterator<const T_> const_iterator;
Других решений пока нет …