首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Q_OBJECT派生类、继承

Q_OBJECT派生类、继承
EN

Stack Overflow用户
提问于 2016-01-30 18:25:24
回答 2查看 2K关注 0票数 1

我是新来的。我有下一个遗产:

代码语言:javascript
复制
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&)中的sync_poster.o注释:缺少vtable通常意味着第一个非内联虚拟成员函数没有定义。ld:在体系结构x86_64中找不到符号

这是什么意思,我做错了什么?你有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-01-30 20:13:21

此错误的一个常见情况是创建一个QObject派生类,并且在构建之前不调用qmake就添加或删除Q_OBJECT。

缺少对qmake的调用不会触发对文件的重新解析,如果您刚刚添加了Q_OBJECT,则moc将不会运行。

票数 4
EN

Stack Overflow用户

发布于 2016-01-30 18:28:54

来自类似的主题Why am I getting "Undefined symbols ... typeinfo ... vtable" with a virtual and concrete class?

...You似乎混淆了定义和声明。您在基类中所拥有的只是没有定义的声明,即实现。您需要使它成为纯虚拟的,或者实现它,即使它只是一个空的{}.

检查构造函数的声明和定义。您的SyncPoster有公共构造函数吗?有定义吗?(有身体吗?)

代码语言:javascript
复制
SyncPoster::SyncPoster(/*...*/)

检查它是否有身体:

代码语言:javascript
复制
SyncPoster::SyncPoster(/*...*/) {}
                              //^^^  body
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35105401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档