Qt自定义类继承QObject类后显示“undefined reference vtable for xxx“

在一个已经编译过的项目中添加了一个自定义类,自定义类在main.h头文件中,而且未继承QObject也没有添加Q_OBJECT宏:
#ifndef MAIN_H
#define MAIN_H
 
class MyWidget

    //自定义信号函数
signals:
    void MySignal(QString mess1,QString mess2);
};
#endif // MAIN_H
若想使用Qt的信号槽通信机制,则需要让自定义类继承自QObject类,并在头文件中添加Q_OBJECT宏:

#ifndef MAIN_H
#define MAIN_H
 
#include<QObject>
#include<QDebug>
#include<QString>
 
class MyWidget:public QObject
{
    //Q_OBJECT 是一个宏,添加它才能正常使用Qt的信号和槽机制
   Q_OBJECT
    //自定义信号函数
signals:
    void MySignal(QString mess1,QString mess2);
public:
    //发射信号的函数
    void emitSignal(){
        emit MySignal(message1,message2);
    }
    //自定义槽函数
public slots:
    void recSlot(QString mess1,QString mess2){
        qDebug()<<"执行recSlot()成员函数,输出"<<mess1<<" "<<mess2;
    }
public:
    QString message1;
    QString message2;
};
#endif // MAIN_H
此时编译报错:

undefined reference to `vtable for MySignalSlot'
解决方法:
删除项目的build目录,然后重新编译;或者将main.h文件从项目中排除,然后再重新加载进来,也可以解决。

原因:
当通过Qt这个IDE创建新类中添加QObject头文件和Q_OBJECT后,Qt会生成相应的“moc_XXX.cpp”文件,用于信号槽的通信实现。但是若在创建类时没有通过Qt添加QObject头文件和Q_OBJECT,Qt无法生成相应的“moc_XXX.cpp”文件,此时就会报错:undefined reference to `vtable for XXX',如上面例子。
————————————————
版权声明:本文为CSDN博主「TanChengkai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/TanChengkai/article/details/102466498

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值