所使用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
。
在加上后解决以上报错,然而又出现了新的问题undefined reference to 'vtable for (类名)'
,让我一直以为是定义的问题,但仔细想想刚才检查过,语法和逻辑上应该没有问题。
于是抱着试试的心态想会不会是原本的编译出了问题,然后点击菜单栏中“执行 qmake”选项后就成功编译运行(构建->选择“执行qmake”),可是并未想明白是为啥😂
后续...
2023-09-09
问题解决:今天创建新的类时仔细留意了一下昨天出现的问题为什么没有
Q_OBJECT
,居然是我没有勾选如下选项(默认是勾选,低版本的没有该选项)。
看不懂一点
牛蛙