这是代码:
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
不是模板,则一切正常。为何如此?如何在模板中修复? 最佳答案
InnerBase
不是独立类型,而是实际上是一个依赖类,因为它实际上是Outer<T>::InnerBase
。因此InnerChild
不知道它确切是从谁继承的(想想专门化*!),因此它不知道n
实际上是一个名称。
要断言n
确实是类成员的名称,请说this->n
或InnerBase::n
,或在using InnerBase::n;
中的某个位置添加一个声明InnerChild
。
*)例如template <> struct Outer<int>::InnerBase { typedef int n; };