Qt编译出错:undefined reference to `vtable for XXX'

前提

在一个已编译的Qt项目中添加了一个类,该类未继承QObject且未在头文件添加Q_OBJECT,如下:

//MySignalSlot.h文件
#ifndef MYSIGNALSLOT_H
#define MYSIGNALSLOT_H

class MySignalSlot
{
public:
    MySignalSlot();
};

#endif // MYSIGNALSLOT_H

若此时想使用Qt的信号槽通信机制,则需要添加QObject头文件,继承QObject,并在头文件中添加Q_OBJECT;如下所示:

#ifndef MYSIGNALSLOT_H
#define MYSIGNALSLOT_H

#include <QObject>

class MySignalSlot : public QObject
{
    Q_OBJECT
public:
    MySignalSlot();
};

#endif // MYSIGNALSLOT_H

此时编译程序,就会报错:

undefined reference to `vtable for MySignalSlot'

解决方法

删除该项目的build目录,然后重新编译即可;或者将新增的文件从项目中删除(文件不删除),然后再通过IDE“添加现有文件”添加文件,也可以解决。

原因

当通过Qt这个IDE创建新类中添加QObject头文件和Q_OBJECT后,Qt会生成相应的“moc_XXX.cpp”文件,用于信号槽的通信实现。但是若在创建类时没有通过Qt添加QObject头文件和Q_OBJECT,Qt无法生成相应的“moc_XXX.cpp”文件,此时就会报错:undefined reference to `vtable for XXX',如上面例子。

结尾

只为记录,只为分享! 愿所写能对你有所帮助。不忘记点个赞,谢谢~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值