gpt4 book ai didi

c++ - Qt "hello world"GUI 应用程序未链接?

转载 作者:太空狗 更新时间:2023-10-29 19:53:23 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Qt: Signals and slots Error: undefined reference to `vtable for

这里我们有 test.cpp:

#include <QApplication>
#include <QMainWindow>

class MainWindow : public QMainWindow
{
Q_OBJECT
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

单独放在一个新目录中并:

$ qmake -project
$ qmake
$ make

它不起作用:

test.o: In function `MainWindow::~MainWindow()':
test.cpp:(.text._ZN10MainWindowD2Ev[_ZN10MainWindowD5Ev]+0x3): undefined reference to `vtable for MainWindow'
test.cpp:(.text._ZN10MainWindowD2Ev[_ZN10MainWindowD5Ev]+0xb): undefined reference to `vtable for MainWindow'
test.o: In function `main':
test.cpp:(.text.startup+0x48): undefined reference to `vtable for MainWindow'
test.cpp:(.text.startup+0x51): undefined reference to `vtable for MainWindow'
test.o: In function `MainWindow::~MainWindow()':
test.cpp:(.text._ZN10MainWindowD0Ev[_ZN10MainWindowD0Ev]+0x7): undefined reference to `vtable for MainWindow'
test.o:test.cpp:(.text._ZN10MainWindowD0Ev[_ZN10MainWindowD0Ev]+0xf): more undefined references to `vtable for MainWindow' follow
collect2: error: ld returned 1 exit status
make: *** [tmp] Error 1

一般来说,此类错误要么是因为未调用 moc,要么是因为未实现的虚拟方法。

moc 应该由 qmake 自动调用,而 afaik QMainWindow 没有任何纯虚方法 - 那么这里的问题是什么?

当我删除 Q_OBJECT 时它起作用了。为什么是这样?这是怎么回事?

我看到 Q_OBJECT 告诉 moc 为该对象生成信号/槽元数据,为什么在这种情况下它不能这样做?

更新:

解决方案是在类下面添加#include "test.moc":

#include <QApplication>
#include <QMainWindow>

class MainWindow : public QMainWindow
{
Q_OBJECT
};

#include "test.moc" // <----------- HERE

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com