基本クラスのテンプレートの問題でネストされたクラスを返すC ++問題

StackOverflow https://stackoverflow.com/questions/1810622

  •  05-07-2019
  •  | 
  •  

質問

リストオブジェクトを作成しようとしていますが、その動作を理解するために、イテレータークラスを内部にネストしています。 何らかの方法で、イテレータオブジェクトを返そうとしていますが、動作しません。 問題を示すサンプルを作成しました:

// CLASS A
template <class T>
class A
{
    public:
        class B;
        A(){}
};

// CLASS B
template <class T>
class A<T>::B
{
    private:
        int varB;

    public:
        B(B& b);
        B(const int&);
        B returnThis();
};

template <class T>
A<T>::B::B(const int& value)
{
    varB = value;
}

template <class T>
A<T>::B::B(B& b)
{
    varB = b.varB;
}

template <class T>
A<T>::B A<T>::B::returnThis()
{
    return *this;
}

// MAIN

void main()
{
    A<int>::B classB(10);
}

エラーはこれらの行の近くにあります:

template <class T>
A<T>::B A<T>::B::returnThis()

コンパイラは、私が行方不明だと言っています。 A :: B :: returnThis()の前

この問題を数日間解決しようとしていますが、機能させる方法が見つかりません... 私はいくつかの助けを本当に感謝します。 事前に感謝します!

役に立ちましたか?

解決

必要なtypename

typename A<T>::B

A<T>::Bがタイプであることをコンパイラーに示すため。 良い説明の理由は次のとおりです。

Bの内容はA<T>の内容に依存し、これは依存関係と呼ばれます。クラスまたは構造体から型を取得し、テンプレートに依存している場合は、常に<=>を使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top