为什么以下工作会很好:
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
如何在能够使用其基本成员并保持类型通用的情况下继承模板类?
答案 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