私は独自のジェネリック リンク リストを作成しており、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 を赤い波線で強調表示し、 から
SortedListReverseIterator<int>
への適切なユーザー定義の変換がないことを示しSortedListReverseIterator<const int>
ます。SortedListReverseIterator というクラスと、イテレータと逆イテレータを実装する SortedListReverseIterator があります。sorted_list クラスで、const_reverse_iterator、reverse_iterator、iterator、および const_iterator の 4 種類の反復子を型定義しました。
編集: constIteratorList の const 参照で rbegin() を呼び出してみましたが、ソートされたリストの呼び出しで、 からNode<T> * const
に変換できないと表示されSortedListReverseIterator<T>
ます。
これは私の rbegin() の実装です:
template <typename T>
SortedListReverseIterator<const T> sorted_list<T>::rbegin() const
{
return SortedListReverseIterator<const T>(tail);
}
エラーメッセージが言おうとしているのは、SortedListReverseIterator のコンストラクターが const T を取り込まないということだと思うので、const T の別のコピーコンストラクターを作成しようとしましたが、うまくいきませんでした..