我的类如何继承接口和QObject
How can my class inherit an interface and QObject ?
我有这样一个接口:
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;
};
我的类继承了is
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的继承时,它工作了。
你知道我该怎么做吗?
这可能是因为您没有在构建中包含.moc
文件。请参阅Qt链接器错误:对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
,参见示例
为什么包含".moc"文件在Qt源代码文件结束?
对于多重继承,如果要继承多个QObject
,则不允许这样做。相反,当有一个QObject
和多个"常规"类时,效果很好。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 删除 QSharedPointer 指向的 QObject
- 如何绑定 C++ gRPC 客户端的网络接口
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 带有进度表的 curl 多接口程序
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- QObject::连接无法将信号连接到*this*对象的插槽
- 从接口到Qobject的铸造
- 将QObject接口信号连接到lambda插槽
- 我的类如何继承接口和QObject