可能重复:
为什么我必须通过this指针访问模板基类成员?
我有一个类似下面的类层次结构:
template<typename T>
class Base {
protected:
T t;
};
template<typename T>
class Derived: public Base<T> {
public:
T get() { return t; }
};
int main() {
Derived<int> d;
d.get();
}
Run Code Online (Sandbox Code Playgroud)
prog.cpp: In member function 'T Derived<T>::get()':
prog.cpp:10:22: error: 't' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
那是正确的编译器行为还是仅仅是编译器错误?如果正确,为什么会这样呢?最好的解决方法是什么?
使用完全限定的名称是可行的,但这似乎是不必要的冗长:
T get() { return Base<T>::t; }
Run Code Online (Sandbox Code Playgroud)
要使用模板基类中的成员,您必须添加前缀this->。
template<typename T>
class Derived: public Base<T> {
public:
T get() { return this->t; }
};
Run Code Online (Sandbox Code Playgroud)