-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 を赤い波線で強調表示し、 から 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 の別のコピーコンストラクターを作成しようとしましたが、うまくいきませんでした..

4

1 に答える 1

0

constIteratorListはconstとして宣言されていないため、rbeginのconstバージョンは使用されません(定義されていると仮定します)。考えられる修正は、リストへのconst参照を作成してから、その上でrbeginを呼び出すことです。

于 2012-12-09T20:03:33.260 に答える