Qt:关于 emit 报错 “undefined reference XXX”

笔记 · 2023-09-08 · 381 人浏览
Qt:关于 emit 报错 “undefined reference XXX”

  所使用Qt版本为5.14.2,Qt Creator版本为4.11.1

  在使用Qt做窗口跳转时,在子窗口的类(*.h 文件)中定义了一条自定义信号,运行开始就报错如下代码(反正很长):

D:\QT\Qt5.14.2\5.14.2\mingw73_32\include\QtCore\qobjectdefs_impl.h:451: error: 'QtPrivate::QFunctorSlotObject<Func, N, Args, R>::QFunctorSlotObject(Func) [with Func = MainScene::MainScene(QWidget*)::<lambda()>; int N = 0; Args = QtPrivate::List<>; R = void]', declared using local type 'MainScene::MainScene(QWidget*)::<lambda()>', is used but never defined [-fpermissive]
         explicit QFunctorSlotObject(Func f) : QSlotObjectBase(&impl), function(std::move(f)) {}
                  ^~~~~~~~~~~~~~~~~~

  一直以为是代码哪里出现了问题,检查了自定义信号、匿名函数都没语法上的错误,后发现新构建的子类文件中并没有加上 Q_OBJECT
2023-09-08T14:38:45.png

  在加上后解决以上报错,然而又出现了新的问题undefined reference to 'vtable for (类名)',让我一直以为是定义的问题,但仔细想想刚才检查过,语法和逻辑上应该没有问题。

  于是抱着试试的心态想会不会是原本的编译出了问题,然后点击菜单栏中“执行 qmake”选项后就成功编译运行(构建->选择“执行qmake”),可是并未想明白是为啥😂
2023-09-08T14:52:13.png



后续...

2023-09-09

问题解决:今天创建新的类时仔细留意了一下昨天出现的问题为什么没有Q_OBJECT,居然是我没有勾选如下选项(默认是勾选,低版本的没有该选项)。

2023-09-09T01:57:07.png

Qt 实验
  1. LosKartos 2023-09-14

    牛蛙

Theme Jasmine by Kent Liao

本网站由 又拍云 提供CDN加速/云存储服务

鄂ICP备2023005457号    鄂公网安备 42011302000815号