Aテンプレート化されたサブクラスが1つあるテンプレート親クラスを使用するこのコードがありますC。Aタイプ(T)をC取り、そのタイプ()のオブジェクトをT tテンプレートパラメータで受け取ります。私がやろうとしているのは、クラスの継承で、そのテンプレート引数Bを与え、オブジェクトを作成し、のメンバー関数を呼び出すことです。しかし、次のエラーが発生します。CbC.h
prog.cpp:10:44:エラー:テンプレートパラメータリストが多すぎます
prog.cpp:関数内'int main()':
prog.cpp:14:5:エラー:'B'このスコープで宣言されていません
prog.cpp:14:7:エラー:';'前に期待'b'
template <typename T> struct A {
protected:
template <T> struct C {
T h( T t ) { return t * t; }
};
};
template <typename T = int> template <T t = 5> struct B : public A<T>::C<t> {};
int main() {
B b;
b.h();
}
オブジェクトをインスタンス化すると、エラーが呼び出されBます。私はいろいろなことを変えようとしましたが、それは状況を助けませんでした。たとえば、次のように変更しました。
template <typename T = int> template <T t = 5> struct B...
に
template <typename T = int> struct B...
と変更されました
: public A<T>::C<t> {};
に
: public A<T>::C<T t = 5> {};
しかし、私はさらに多くのエラーを受け取りました:
'C'prog.cpp:10:53:エラー:テンプレートとして使用されていない非テンプレート
prog.cpp:10:53:注:'A<T>::template C'テンプレートであることを示すために使用
prog.cpp:10:66:エラー:トークン prog.cppの'{'前に予期されます:関数内: prog.cpp:14:7:エラー:prog.cpp:14:7の前にテンプレート引数がありません:エラー:前に 予期されていました';''int main()'b'';''b'
また、最初に発生した一連のエラーについても興味がありB was not declared in this scopeます。どうしてできなかったのでしょうか?それは私が定義している方法Bですか?何が間違っているのでしょうか?