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->nか、のある時点でInnerBase::n宣言を追加します。using InnerBase::n;InnerChild

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

于 2012-07-21T23:41:29.060 に答える