【问题标题】:Definition and Declaration of derived classes in *.h file and *.cpp file*.h 文件和 *.cpp 文件中派生类的定义和声明
【发布时间】:2015-09-15 22:35:28
【问题描述】:

我在头文件中声明派生构造函数及其在 *.cpp 文件中的定义时遇到了一些小问题

我的头文件:

class Nrpeoutputquery : public Query
{
private:
    std::string queryText;
    std::string queryType;

public:
    //default Constructor
    Nrpeoutputquery();
    //Constructor
    Nrpeoutputquery(std::string queryText, std::string queryType, sql::Connection *connection) : Query(connection);
    //Destructor
    ~Nrpeoutputquery();

};

我的 *.cpp 文件

namespace nrpeout
{

Nrpeoutputquery::Nrpeoutputquery() 
{

}

Nrpeoutputquery::Nrpeoutputquery(std::string queryText, std::string queryType, sql::Connection *connection) : Query(connection)
{
        this->queryText = queryText;
        this->queryType = queryType;
}

Nrpeoutputquery::~Nrpeoutputquery() 
{

}
}

我收到编译错误:

Nrpeoutputquery(std::string queryText, std::string queryType, sql::Connection *connection) : Query(connection);

Nrpeoutputquery.h:19:112:错误:输入结束时应为“{”

显然编译器需要在头文件中定义构造函数。从基类的标准构造函数继承字段的构造函数的定义不会出现问题。

那么:有没有办法不直接在头文件中使用基类的非标准构造函数声明派生类的构造函数?

【问题讨论】:

    标签: c++ inheritance constructor


    【解决方案1】:

    构造函数必须像这样声明

    Nrpeoutputquery(std::string queryText, std::string queryType, sql::Connection *connection );
    

    你必须删除 mem-initializer 列表: Query(connection) 来自构造函数声明。

    【讨论】:

      【解决方案2】:

      在你的声明中,改变这个

      Nrpeoutputquery(std::string queryText, std::string queryType, sql::Connection *connection) : Query(connection);
      

      Nrpeoutputquery(std::string queryText, std::string queryType, sql::Connection *connection);
      

      当您添加 : Query(connection) 时,您正在使用初始化列表调用基类的构造函数,因此它认为您提供的是完整的构造函数定义,而不仅仅是声明。

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-18
        相关资源
        最近更新 更多