error: undefined reference to `vtable for 类名'

加盾男爵 2018-06-12 04:17:42
win7 + mingw32位+Qt5.10

通过QtCreator创建一个继承自QDialog的类,没有加上任何代码,直接编译运行,结果显示
error: undefined reference to `vtable for 类名'

如果注释掉类头文件李的Q_OBJECT宏,编译通过,运行正常,

然后加入若干按钮,布局,没有添加信号与槽,也没有用到Q_OBJECT宏,编译,运行都正常
然后应为需要用到信号和曹,所以必须添加Q_OBJECT宏,添加完后编译,显示

error: undefined reference to `vtable for 类名'
打开类对应的moc文件,发现文件内容为空白,度娘唯一解决办法是删掉对应的moc文件重新编译(吐槽下现在的博客,一篇文章会被转载N次,然后搜索到的答案就只有一个,,,,)
我删除了除源代码之外所有的文件,重新编译,单任然显示error: undefined reference to `vtable for 类名'

我切换到命令行模式
qmake -project
qmake xxx.pro
mingw32-make
编译还是显示:error: undefined reference to `vtable for 类名'

请问下这个该怎么解决

以下是出错头的一个文件的完整代码,只要类添 加Q_OBJECT宏就会出现这个问题
#ifndef LOADINGDIALOG_H
#define LOADINGDIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QCheckBox>
#include <QMouseEvent>
#include <QShowEvent>

class MocTest : public QDialog
{
Q_OBJECT
private:
QLineEdit* account_LineEdit;
QLineEdit* passWD_LineEdit;

QCheckBox* rememberPassWd_CheckBox;
QCheckBox* autoLoad_CheckBox;
QPushButton* infoPix_PushButton;

public:
MocTest(QWidget* parent = 0);
~MocTest();
//signals:
//void loadSuccessful();
//void loadFail();
};

#endif // LOADINGDIALOG_H
...全文
2002 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
星火燎原凯 2019-01-28
  • 打赏
  • 举报
回复 1
把原先的Makefile文件删掉,再重新构建试一下。
donwmufromdying 2018-06-15
  • 打赏
  • 举报
回复
有时候没有删除掉老的自动生成的moc
donwmufromdying 2018-06-15
  • 打赏
  • 举报
回复
引用 4 楼 qazaq408 的回复:
[quote=引用 3 楼 foxyz 的回复:] 这个报错是很经典的Qt报错。一般是你定义了成员函数,没有去实现。也就是你的成员函数在头文件里声明了,没有在cpp里实现。
测试过,不是这个问题,我用QtCreator直接建立一个GUI程序不加任何改动,就会报这个问题,然后把代码里的Q_OBJECT宏注释掉,就不会出现这个问题[/quote] 你说的这个GUI头文件和CPP文件能发出来看看吗?另外,清除项目并qmake后重新编译看看。Q_OBJECT只是当你需要自己创建从QObject继承的子类,并要自定义一些signal和slot函数的时候,以及可能的自定义Q_PROPERTY成员属性的时候,需要这个宏定义。所以你最好自己检查一下你的头文件里是否有空的signal和slot
加盾男爵 2018-06-13
  • 打赏
  • 举报
回复
引用 3 楼 foxyz 的回复:
这个报错是很经典的Qt报错。一般是你定义了成员函数,没有去实现。也就是你的成员函数在头文件里声明了,没有在cpp里实现。

使用vs编译器的QtCreator生产一个QDialog,不加任何代码,不会像mingw编译器的那样乱码,单直接运行还是报错
加盾男爵 2018-06-13
  • 打赏
  • 举报
回复
引用 3 楼 foxyz 的回复:
这个报错是很经典的Qt报错。一般是你定义了成员函数,没有去实现。也就是你的成员函数在头文件里声明了,没有在cpp里实现。

开始我以为是我电脑编码问题,qtCreateor新建项目,然后是这个样子的

然后我用notpad++该了所有文件的编码,但还是这个问题,加上Q_OBJECT宏就报错
加盾男爵 2018-06-13
  • 打赏
  • 举报
回复
引用 3 楼 foxyz 的回复:
这个报错是很经典的Qt报错。一般是你定义了成员函数,没有去实现。也就是你的成员函数在头文件里声明了,没有在cpp里实现。
测试过,不是这个问题,我用QtCreator直接建立一个GUI程序不加任何改动,就会报这个问题,然后把代码里的Q_OBJECT宏注释掉,就不会出现这个问题
donwmufromdying 2018-06-13
  • 打赏
  • 举报
回复
这个报错是很经典的Qt报错。一般是你定义了成员函数,没有去实现。也就是你的成员函数在头文件里声明了,没有在cpp里实现。
加盾男爵 2018-06-12
  • 打赏
  • 举报
回复
引用 1 楼 shiyanbo_1006 的回复:
装的时候少东西了吧?
以你的经验,少装什么东西会造成这种情况。。。。
待续_1006 2018-06-12
  • 打赏
  • 举报
回复
装的时候少东西了吧?

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧