-1

我正在构建自己的通用链表,并且正在尝试测试我的 const 反向迭代器。这就是我想要做的:

sorted_list<int> constIteratorList;
int we = 7;
int io = 1;
int pl = 12;
int jk = 4;
int zx = 13;
constIteratorList.add(we);
constIteratorList.add(io);
constIteratorList.add(pl);
constIteratorList.add(jk);
constIteratorList.add(zx);
const sorted_list<int>& reference = constIteratorList
sorted_list<int>::const_reverse_iterator constIt = reference.rbegin();

但是编译器用红色波浪线突出显示 constIteratorList 并说没有合适的用户定义转换 from SortedListReverseIterator<int>to SortedListReverseIterator<const int>。我有一个名为 SortedListReverseIterator 的类和一个实现我的迭代器和反向迭代器的 SortedListReverseIterator。我在 sorted_list 类中键入了四种类型的迭代器——const_reverse_iterator、reverse_iterator、iterator 和 const_iterator。

编辑:我现在尝试在 constIteratorList 的 const 引用上调用 rbegin(),但现在在我的排序列表调用中,它说我无法从Node<T> * constto转换为SortedListReverseIterator<T>.

这是我对 rbegin() 的实现:

template <typename T>  
SortedListReverseIterator<const T> sorted_list<T>::rbegin() const  
{  
    return SortedListReverseIterator<const T>(tail);
}

我认为错误消息试图说的是 SortedListReverseIterator 的构造函数不接受 const T,所以我尝试为 const T 创建另一个复制构造函数,但没有成功。

4

1 回答 1

0

constIteratorList 未声明为 const,因此不会使用 rbegin 的 const 版本(假设它已被定义)。一个可能的解决方法是创建一个对列表的 const 引用,然后在其上调用 rbegin。

于 2012-12-09T20:03:33.260 回答