下面是一個正常工作現在類具有虛擬功能,從繼承自QObject時,會導致連接錯誤
class HttpService {
public:
virtual ~HttpService(); // implemented in .cpp
protected:
HttpService(struct MHD_Connection *conn) {}
};
class HttpFileService : public HttpService
{
public:
virtual ~HttpFileService() ; // implemented in .cpp
protected:
HttpFileService(struct MHD_Connection *conn) : HttpService(conn) {}
};
的代碼,當我提出HttpService
派生類的QObject
,象下面這樣:
#include <QObject> // change #1
class HttpService : public QObject { // change #2
Q_OBJECT // change #3
public:
virtual ~HttpService();
protected:
HttpService(struct MHD_Connection *conn) {}
};
class HttpFileService : public HttpService {
Q_OBJECT // change #4
public:
virtual ~HttpFileService() ;
protected:
HttpFileService(struct MHD_Connection *conn) : HttpService(conn) {}
};
我遇到以下鏈接錯誤:
Undefined symbols for architecture x86_64:
"vtable for HttpService", referenced from:
HttpService::~HttpService()in httpservice.o
更改HttpService
的構造以下內容並沒有幫助
explicit HttpService(QObject *parent = 0) : QObject(parent)
代碼更改後,'〜HttpService()'仍然在'.cpp'文件中實現?我問這是因爲,在更改後的代碼中,我沒有看到註釋爲「//在.cpp中實現」。 – iammilind
@iammilind,是的,它仍然是。唯一被更改的行在註釋中突出顯示 –
是否是整個'HttpService()'?如果我在一個抽象基類中聲明瞭一個虛函數,我經常會看到這個錯誤,並且忘記將其變爲純文本。 (gcc在與第一個非純的非內聯虛函數相同的目標文件中生成vtable,如果聲明瞭這樣的函數,並且沒有定義,那麼它最終會丟失)。 –