我已经实现了一个双向链表,并创建了一个扩展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()
的常量版本,以及{{1 }和cbegin()
?
答案 0 :(得分:2)
右。问题是你的const_iterator typedef的声明。 (见How to correctly implement custom iterators and const_iterators?)
而不是
typename typedef list_iterator<T_> const const_iterator;
你想要
typename typedef list_iterator<const T_> const_iterator;