未找到基类模板的成员

时间:2012-11-12 11:43:01

标签: c++ templates

  

可能重复:
  Why do I have to access template base class members through the this pointer?

我有一个类层次结构,如下所示:

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();
}

问题在于受保护的member variable t is not found in the Base class。编译器输出:

prog.cpp: In member function 'T Derived<T>::get()':
prog.cpp:10:22: error: 't' was not declared in this scope

这是正确的编译器行为还是仅仅是编译器错误?如果它是正确的,为什么会这样?什么是最好的解决方法?

使用完全限定名称有效,但似乎不必要地冗长:

T get() { return Base<T>::t; }

1 个答案:

答案 0 :(得分:2)

要使用模板基类中的成员,您必须使用this->作为前缀。

template<typename T>
class Derived: public Base<T> {
public:
    T get() { return this->t; }
};