【问题标题】:c++ error inheriting baseClass with templatec++错误继承baseClass与模板
【发布时间】:2015-02-07 13:57:42
【问题描述】:

我有一个关于固有模板基类的错误的问题。我在子类源文件中收到此错误:

error: class ‘JobCalcReturn’ does not have any field named ‘JobMaster’

我的基类作为 *.h 文件:

template<class dataIn, class dataOut>
class JobMaster
{
public:
   JobMaster() : JSONin("NOP"){};
   JobMaster(const std::string &_JSONin) :  JSONin(_JSONin){};
   virtual ~JobMaster(){};
private:
   static dataIn dataInObject;
   static dataOut dataOutObject;
   const  std::string &JSONin;
   static std::string JSONout;
   virtual std::string dataInHandler(dataIn&  dataInObject){...};
   //Some more virutal methodes
};

我的子类标题:

class DataInClass{...};

class JobCalcReturn :public JobMaster<DataInClass, Poco::JSON::Array>
{
public:
   JobCalcReturn(const std::string &_JSONin);
   ~JobCalcReturn();
private:
    std::string dataInHandler(DataInClass& calcRatrunData); 
};

我的子类源文件:

JobCalcReturn::JobCalcReturn(const std::string& _JSONin) : JobMaster(_JSONin){}
//here in the constructor i get the error
JobCalcReturn::~JobCalcReturn(){}

std::string JobCalcReturn::dataInHandler(DataInClass& calcRatrunData){...}

我用 Visual Studio 2013 写了这个并且没有错误,然后我用 eclipse 和 gcc c++ 编译器将系统切换到 Linux,我得到了这个错误。有人知道我为什么会收到此错误吗?

【问题讨论】:

    标签: c++ templates inheritance


    【解决方案1】:

    Jobmaster 是一个类模板。所以你需要在JobCalcReturn构造函数的定义中提供模板参数:

    JobCalcReturn::JobCalcReturn(const std::string& _JSONin) 
    : JobMaster<DataInClass, Poco::JSON::Array>(_JSONin){}
    

    还要注意_JSONinreserved identifier。您需要使用不同的名称。

    【讨论】:

    • 感谢@juanchopanza 提供带有保留标识符的提示,但我尝试了这个并在头文件中得到一个新错误:error: expected template-name before ‘&lt;’ token error: expected ‘{’ before ‘&lt;’ token error: expected unqualified-id before ‘&lt;’ token 在这一行中:class JobCalcReturn :public JobMaster&lt;CalcReturnDataInClass, Poco::JSON::Array&gt; JobMaster 不是我的模板-姓名?
    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2018-02-10
    • 2010-12-09
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多