簡體   English   中英

* .h文件和* .cpp文件中的派生類的定義和聲明

[英]Definition and Declaration of derived classes in *.h file and *.cpp file

我在頭文件中聲明派生的構造方法及其在* .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:錯誤:輸入末尾預期為'{'

顯然,編譯器希望在頭文件中定義構造函數。 從繼承自基類的標准構造方法的字段的構造方法的定義中不會出現此問題。

因此:有什么方法可以不直接在頭文件中使用基類的非標准構造函數來聲明派生類的構造函數?

構造函數必須像

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

您必須從構造函數聲明中刪除mem-initializer列表: Query(connection)

在您的聲明中,更改此

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

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

添加: Query(connection)您正在使用初始化列表調用基類的構造函數,因此它認為您提供的是完整的構造函數定義,而不僅僅是聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM