我是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的符号
这是什么意思,我做错了什么?你有什么想法吗?
答案 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