基本クラスのテンプレートの問題でネストされたクラスを返すC ++問題
質問
リストオブジェクトを作成しようとしていますが、その動作を理解するために、イテレータークラスを内部にネストしています。 何らかの方法で、イテレータオブジェクトを返そうとしていますが、動作しません。 問題を示すサンプルを作成しました:
// 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>
の内容に依存し、これは依存関係と呼ばれます。クラスまたは構造体から型を取得し、テンプレートに依存している場合は、常に<=>を使用する必要があります。
所属していません StackOverflow