我有这个界面:
class TCPClient : public QObject, ISocketClient
{
Q_OBJECT
public:
TCPClient(QObject *parent = 0);
~TCPClient();
bool connectToHost(std::string const &hostname, unsigned short port);
void closeClient();
bool sendMessage(Message &);
Message *getMessage();
public slots:
void readMessage();
private:
QTcpSocket *tcpSocket;
};
这是我继承的课程:
/home/danilo_d/Epitech-Projects/Semestre5/QtNetworkTest/TCPClient.cpp:4: error: undefined reference to `vtable for TCPClient'
但是当我编译时,我有这个错误:
db.Table.Where(a => listOfIds.All(b => a.SubTable.Contains(b)))
当我取出QObject的继承时,它可以工作。
知道我该怎么做吗?
答案 0 :(得分:1)
这可能是因为您未在构建中包含.moc
文件。有关类似问题,请参阅Qt Linker Error: "undefined reference to vtable",但是,如果您的构建系统未知,那么我们的想法是:
a)您需要确保在moc
文件上运行.cpp
并
b)生成的.cpp
文件包含在构建中。
它是如何完成的,取决于构建系统。例如,在我目前的项目中,使用Cmake 3.x.x,这个命令就足够了:
set (CMAKE_INCLUDE_CURRENT_DIR ON)
set (CMAKE_AUTOMOC ON)
对于GNU make
,下面是一个如何完成的示例:
http://doc.qt.io/qt-4.8/moc.html#writing-make-rules-for-invoking-moc
对于qmake
,请参阅例如
Why is important to include ".moc" file at end of a Qt Source code file?
对于多重继承,如果要继承多个QObject
,则不允许这样做。相反,当有一个QObject
和多个"常规"课程,工作正常。