当我们创建一个派生自另一个模板类example1
的模板类example2
时。模板类example1
不会系统地继承example2
成员。
考虑下面的代码:
template<class T>
class example2 {
protected:
int a;
public:
int getA() const {return a;}
};
template<class T>
class example1 : public example2<T> {
T* p;
public:
void test() {
example2<T>::a = 8;
}
};
在类test
的方法example1
中,我们必须使用example2<T>::
运算符才能访问成员a
。否则,编译器会生成错误:'a' was not declared in this scope
。
我的意思是,为什么编译器无法识别班级a
中的example1
?为什么我们应该指定example2<T>::a
而不只是a
?
由于