【问题标题】:Templated class members in the base class, don't exist in the derived classes [duplicate]基类中的模板类成员,派生类中不存在[重复]
【发布时间】:2013-12-17 21:54:01
【问题描述】:

遵守以下程序。

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:错误:“基准”未在此范围内声明
如何编辑它以使其以与第一个示例相同的方式工作?我必须对构造函数做些什么吗?

【问题讨论】:

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


    【解决方案1】:

    Get_Datum 更改为:

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

    有关解释,请在此处阅读答案-> https://stackoverflow.com/a/10639312/986

    【讨论】:

      【解决方案2】:

      谢谢。提供的可能重复链接回答了我的问题。
      诀窍是添加“this->”,将数据转换为从属名称。

      解决方案:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-11
        • 2014-08-01
        • 1970-01-01
        • 2012-09-12
        • 2016-05-21
        • 2018-01-16
        • 2017-02-10
        相关资源
        最近更新 更多