A
テンプレート化されたサブクラスが1つあるテンプレート親クラスを使用するこのコードがありますC
。A
タイプ(T
)をC
取り、そのタイプ()のオブジェクトをT t
テンプレートパラメータで受け取ります。私がやろうとしているのは、クラスの継承で、そのテンプレート引数B
を与え、オブジェクトを作成し、のメンバー関数を呼び出すことです。しかし、次のエラーが発生します。C
b
C
.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
ですか?何が間違っているのでしょうか?