基类中的模板化类成员在派生类中不存在

时间:2013-12-02 08:46:20

标签: c++ class templates inheritance c++11

请注意以下程序。

class Base{

protected:
    int datum;
};

class D: public Base{
public:
    int Get_Datum(){
        return datum;
    }

};

int main(){}

基类包含成员变量。我们已明确声明成员变量是一个整数。派生类可以从基类继承并访问该成员变量。这可以按预期编译和工作。


现在让我们尝试相同的事情,但是在编译时推断出数据成员。

template <typename Datum>
class Base{

protected:
    Datum datum;
};

template <typename Datum>
class D: public Base<Datum>{

public:
    int Get_Datum(){
        return datum;
    }

};

int main(){}

15:10:错误:'范围'未在此范围内声明
如何编辑它以使其工作方式与第一个示例相同?我是否必须对构造函数做些什么?

2 个答案:

答案 0 :(得分:2)

Get_Datum更改为:

int Get_Datum()
{
    return this->datum;
}

要获得解释,请在此处阅读答案 - &gt; https://stackoverflow.com/a/10639312/986

答案 1 :(得分:0)

谢谢。提供可能的重复链接,回答我的问题 诀窍是添加“this-&gt;”,将数据转换为依赖名称。

<强>解决方案:

template <typename Datum>
class Base{

protected:
    Datum datum;
};

template <typename Datum>
class D: public Base<Datum>{
public:

    int Get_Datum(){
        return this->datum; //<- "this->" added
    }

};

int main(){}