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?