* .h文件和* .cpp文件中派生类的定义和声明

时间:2015-06-29 12:45:53

标签: c++ inheritance constructor

我在头文件中声明派生的构造函数及其在* .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):查询(连接);

Nrpeoutputquery.h:19:112:错误:在输入结束时预期'{'

显然,编译器需要在头文件中定义构造函数。构造函数的定义没有出现问题,这些构造函数继承了基类的标准构造函数中的字段。

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

2 个答案:

答案 0 :(得分:4)

构造函数必须声明为

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

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

答案 1 :(得分:1)

在您的声明中,请更改此

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

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

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