以下是代码:
template <typename T>
struct Outer {
struct InnerBase {
int n;
InnerBase() : n(42) { }
};
struct InnerChild : InnerBase {
int getN() { return n; }
};
};
问题在于:
In member function 'int Outer<T>::InnerChild::getN()':
error: 'n' was not declared in this scope
如果Outer
不是模板,一切正常。怎么会这样?如何在模板中修复它?
答案 0 :(得分:7)
InnerBase
不是一个独立的类型,但实际上是一个依赖类,因为它确实是Outer<T>::InnerBase
。因此InnerChild
不知道它究竟是从哪个继承(想想特化*!),因此它不知道n
实际上是一个名字。
断言n
确实是班级成员的名字,比如this->n
或InnerBase::n
,或者在using InnerBase::n;
的某个位置添加声明InnerChild
}。
*)例如template <> struct Outer<int>::InnerBase { typedef int n; };
子>