我的类如何继承接口和QObject?

时间:2016-10-15 11:42:02

标签: c++ qt inheritance

我有这个界面:

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的继承时,它可以工作。

知道我该怎么做吗?

1 个答案:

答案 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和多个"常规"课程,工作正常。