以下代码有效:
template<typename T> class OtherClass
{
public:
T member;
};
template<typename T> class MyClass
{
public:
vector<vector<OtherClass<T> > * > stacks;
};
template<typename T>
static vector<vector<OtherClass<T> > * > MyClass<T>::stacks =
vector<vector<OtherClass<T> > * >(1024);
但是这个没有:
template<typename T> class MyClass
{
public:
class OtherClass
{
public:
T member;
};
static vector<vector<OtherClass> * > stacks;
};
template<typename T>
vector<vector<MyClass<T>::OtherClass> * > MyClass<T>::stacks =
vector<vector<MyClass<T>::OtherClass> * >(1024);
gcc抱怨其他事情: 错误:模板参数列表中参数1的类型/值不匹配'模板类向量'
知道如何嵌套课程吗?
谢谢!
答案 0 :(得分:3)
你需要告诉编译器,OtherClass是一个带有typename
的嵌套类型template<typename T>
vector<vector<typename MyClass<T>::OtherClass> * > MyClass<T>::stacks =
vector<vector<MyClass<T>::OtherClass> * >(1024);
无需重复两次类型:
template<typename T>
vector<vector<typename MyClass<T>::OtherClass> * > MyClass<T>::stacks (1024);
如果您不想重复复杂的原始类型,请使用typedef,仍需要typename:
// in Myclass : using StackType = vector<vector<OtherClass>*>;
template<typename T>
typename MyClass<T>::StackType MyClass<T>::stacks (1024);