英文的真实描述为:“typename cannot be used outside a template declaration”,由于翻译错误,将 typename 翻译成了 类型名称
解决办法:
根据错误指示的行数, 删除即可
typename除用在模板声明中外,只能用于说明模板类的成员是一个类型.
例如:
template class X {};
// Another way
template struct X {
typedef double DoubleType;
typename X::DoubleType a; // T::A is a type
};
而如果不是模板类,则不能用typename.这时,它并不是多余的,而是一定不能要的.
例如:
template<> struct X< X > {
typename X::DoubleType a; //Error! X is not a generic class
X::DoubleType b; //OK!
};