如何使用模板继承一个类?

时间:2014-02-23 20:33:24

标签: c++

为什么以下工作会很好:

class a
{
   public:
    int n;
};

class b : public a
{
 public:
  b()
  {
      n = 1;
  }
};

int main()
{
}

但这不起作用:

template <class T>
class a
{
   public:
      int n;
};

template <class T>
class b : public a<T>
{
   public:
    b()
    {
       n = 1;
    }
};

int main()
{
}

并给出以下错误:

 1.cpp: In constructor ‘b<T>::b()’:
 1.cpp:14: error: ‘n’ was not declared in this scope

如何在能够使用其基本成员并保持类型通用的情况下继承模板类?

1 个答案:

答案 0 :(得分:3)

您需要使用“ this ”或“ using ”指令(或明确使用基类资格)来限定它。

简而言之:该变量是非依赖类型不依赖于模板类的T ),在查找非依赖类型的声明时,编译器不会查找依赖类型(您的&lt; T&gt;)。

this->n,因为“this”指的是一个依赖类,有效。与我列出的其他方法相同。


参考文献:

常见问题解答:http://www.parashift.com/c++-faq-lite/nondependent-name-lookup-members.html 这里的实例:http://ideone.com/nsw4XJ