2

二重リンクリストを実装しようとしていて、イテレータを作成したいと思います。構造は次のとおりです。

template<class type>
class List {
    size_t listElementCnt;
    ...
public:
    ...
    class iterator {
        ...
    public:
        ...
        iterator& operator ++();
        iterator operator ++(int);
        ...
    };
    ...
 };

次に、両方の演算子のオーバーロードを実装します。

template<class type>
typename iterator& List<type>::iterator::operator ++() {
    ...
}
template<class type>
typename iterator List<type>::iterator::operator ++(int) {
    ...
}

現在、2つのエラーがあります。

  • メンバー宣言が見つかりません
  • タイプ「イテレータ」を解決できませんでした

間接参照演算子や(不)等しい演算子など、他の演算子をオーバーロードしても、エラーは発生しません。エラーはg++-compilerで表示されます。Visual C ++のコンパイラはエラーを表示せず、そこで正常に動作します。

4

2 に答える 2

4

メンバー関数のアウトオブライン定義では、クラス名がまだ表示されていないため、関数の戻り型はクラススコープにありません。したがって、定義を次のように変更します。

template<class type>
typename List<type>::iterator& List<type>::iterator::operator ++() {
    ...
}
template<class type>
typename List<type>::iterator List<type>::iterator::operator ++(int) {
    ...
}
于 2013-03-23T11:43:57.200 に答える
3

iterator返品タイプで資格を得る必要があります:

template<class type>
typename List<type>::iterator& List<type>::iterator::operator ++() {
    ...
}
template<class type>
typename List<type>::iterator List<type>::iterator::operator ++(int) {
    ...
}
于 2013-03-23T11:43:24.450 に答える