Q_OBJECT 派生类,继承
Posted
技术标签:
【中文标题】Q_OBJECT 派生类,继承【英文标题】:Q_OBJECT derived class, inheritance 【发布时间】:2016-01-30 18:25:24 【问题描述】:我是 qt 的新手。 我有下一个继承:
class Poster : public QObject
Q_OBJECT
class SyncPoster: public Poster
Q_OBJECT
private slots:
... some functions
class TextPoster : public Poster
Q_OBJECT
private slots:
... some functions
但是组装会引发以下错误:
架构 x86_64 的未定义符号:“vtable for SyncPoster”, 参考自: SyncPoster::SyncPoster(Window*, QString const&, QString const&, QString const&, QString const&) 在 sync_poster.o 注意:缺少 vtable 通常意味着第一个非内联虚成员函数具有 没有定义。 ld:未找到架构 x86_64 的符号
这是什么意思,我做错了什么?你有什么想法吗?
【问题讨论】:
【参考方案1】:此错误的一个常见情况是,当您创建 QObject 派生类并在构建之前添加或删除 Q_OBJECT 时未调用 qmake。
如果您刚刚添加了 Q_OBJECT,对 qmake 的缺失调用不会触发文件的重新解析,并且 moc 将不会运行。
【讨论】:
【参考方案2】:来自类似主题Why am I getting "Undefined symbols ... typeinfo ... vtable" with a virtual and concrete class?:
...您似乎将定义与声明混淆了。你有什么 在基类中只是没有定义的声明,即 执行。您要么需要使其成为纯虚拟的,要么需要实现 即使它只是一个空的 ...
检查构造函数的声明和定义。你的SyncPoster
类有公共构造函数吗?它有定义吗? (有身体吗?)
SyncPoster::SyncPoster(/*...*/)
检查是否有body:
SyncPoster::SyncPoster(/*...*/)
//^^^ body
【讨论】:
我有所有的类在头文件中有 Q_OBJECT 宏。我已经编辑了问题 我能从中看出什么? 检查是否有没有定义的声明 我检查了所有方法,似乎没问题。实际上我只是重建了一段时间我的项目,现在一切都很好。似乎只是 IDE 缓存错误。以上是关于Q_OBJECT 派生类,继承的主要内容,如果未能解决你的问题,请参考以下文章