I have this code that uses a template parent class A
that has one templated sub-class C
. A
takes a type (T
) and C
takes an object of that type (T t
) in their template parameters. What I'm trying to do is, in the inheritance of the class B
, give C
its template arguments, make a b
object, and call C
's .h
member function. But I'm getting the following errors:
prog.cpp:10:44: error: too many template-parameter-lists
prog.cpp: In function'int main()'
:
prog.cpp:14:5: error:'B'
was not declared in this scope
prog.cpp:14:7: error: expected';'
before'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();
}
The error is called when I instantiate a B
object. I've tried changing a lot of things around but it didn't help the situation. For example, I changed:
template <typename T = int> template <T t = 5> struct B...
to
template <typename T = int> struct B...
and changed
: public A<T>::C<t> {};
to
: public A<T>::C<T t = 5> {};
But I received even more errors:
prog.cpp:10:53: error: non-template
'C'
used as template
prog.cpp:10:53: note: use'A<T>::template C'
to indicate that it is a template
prog.cpp:10:66: error: expected'{'
before';'
token
prog.cpp: In function'int main()
:
prog.cpp:14:7: error: missing template arguments before'b'
prog.cpp:14:7: error: expected';'
before'b'
I'm also curious about the first set of errors in which I got B was not declared in this scope
. How could it not be? Is it the way I'm defining B
? What could I be doing wrong?