1

这是代码:

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不是模板,一切正常。怎么会这样?如何在模板中修复它?

4

1 回答 1

7

InnerBase不是一个独立的类型,而是一个依赖类,因为它真的是Outer<T>::InnerBase. 因此InnerChild不知道它究竟是从谁那里继承的(想想专业化*!),因此它不知道这n实际上是一个名字。

要断言它n确实是一个类成员的名称,比如说this->nor InnerBase::n,或者using InnerBase::n;InnerChild.

*) 例如template <> struct Outer<int>::InnerBase { typedef int n; };

于 2012-07-21T23:41:29.060 回答