c++ - 找不到基类模板的成员

标签 c++ templates

<分区>

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

问题是 protected 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; }

最佳答案

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

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

关于c++ - 找不到基类模板的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343102/

相关文章:

c++ - 使用 C++,如何在终止之前检测进程

c++ - 类模板特化与模板

javascript - 如何从模板添加 SVG g 元素?

c++ - 模板非类型参数?

c++ - CUDA 相当于 OpenCV 3 中的 estimateRigidTransform

c++ - 在 C++ 中使用循环进行八进制转换

c++ - Lambda 通过引用捕获并在槽中使用

c++ - 为什么我们在Qt中处理表单时要为ui对象声明一个命名空间?

javascript - 转义 Dust.js 标签

c++ - 模板类作为模板类参数