【发布时间】:2017-02-24 19:06:16
【问题描述】:
我有这个界面:
class ISocketClient
{
public:
~ISocketClient() {}
virtual bool connectToHost(std::string const &hostname, unsigned short port) = 0;
virtual void closeClient() = 0;
virtual bool sendMessage(Message &) = 0;
virtual Message *getMessage() = 0;
};
这是我继承的类:
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'
当我取出 QObject 的继承时,它就起作用了。
知道我该怎么做吗?
【问题讨论】:
-
你能显示
TCPClient.cpp吗? -
我想你想要:
class TCPClient : public QObject, public ISocketClient,反正~ISocketClient() {}应该是虚拟的 -
@user3528438 真的吗?这不是我阅读Multiple Inheritance Requires QObject to Be First 要求的方式。
-
@user3528438 只要
ISocketClient不是继承自QObject,并且QObject是第一个base就可以了
标签: c++ qt inheritance