Q_OBJECT派生类,继承

时间:2016-01-30 18:25:25

标签: qt qobject

我是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",   引自:         sync_poster.o中的SyncPoster :: SyncPoster(Window *,QString const&,QString const&,QString const&,QString const&)注意:缺少   vtable通常表示第一个非内联虚拟成员函数   没有定义。 ld:找不到架构x86_64的符号

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

  

......你似乎把定义与宣言混淆了。你有什么   在基类中只是声明没有定义,即   实现。您需要将其设为纯虚拟或实现   即使它只是一个空的{} ......

检查构造函数的声明和定义。您的SyncPoster是否有公共构造函数?它是否有定义? (有一个身体?)

SyncPoster::SyncPoster(/*...*/)

检查它是否有正文:

SyncPoster::SyncPoster(/*...*/) {}
                              //^^^  body