提问人:Placetor 提问时间:2/4/2022 更新时间:2/4/2022 访问量:877
错误:未定义对 MainWindow::~MainWindow 的引用 |gcc、VSCode 下的 Qt
Error : undefined reference to MainWindow::~MainWindow | Qt under gcc, VSCode
问:
我将一个项目从Qt Creator导入到另一台PC,并试图让它在VSCode下运行。作为记录,我能够在以前的PC上从Qt Creator运行它。在努力让代码通过编译之后,我遇到了一个涉及链接器的问题。 生成项目时会遇到问题。从 tasks.json 文件传递的生成提示如下所示:
F:\fortan\mingw32\bin\gcc.exe -fdiagnostics-color=always -g "F:\[...]\main.cpp" -o "F:\[...]\main.exe" -lstdc++ -L F:\Soft\Qt\5.15.2\mingw81_32\lib -l Qt5Widgets -l Qt5Core -I F:\Soft\Qt\5.15.2\mingw81_32\include
错误消息如下:
[...]/main.cpp:9: undefined reference to 'MainWindow::MainWindow(QWidget*)'
[...]/main.cpp:9: undefined reference to 'MainWindow::~MainWindow()'
[...]/main.cpp:9: undefined reference to 'MainWindow::~MainWindow()'
collect2.exe: error: ld returned 1 exit status
这是(没有什么不寻常的)的代码:main.cpp
#include "mainwindow.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show(); //line 9 is here
return a.exec();
}
似乎 MainWindow w 对象的创建导致了问题。错误似乎来自链接器,我不明白。
MainWindow 类及其构造函数和析构函数声明如下 ():mainwindow.h
#include <QtWidgets/QMainWindow>
#include <QtCore/QString>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
[...]
并定义如下():mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
[...]
在仔细检查了构造函数的所有包含和正确的声明/实现之后,我尝试在 gcc 提示符下链接 .h 文件,将 -L 链接到项目目录,并使用 -l(称我为迷信),但无济于事。
答: 暂无答案
评论
F:\fortan\mingw32\bin\gcc.exe -fdiagnostics-color=always -g "F:\[...]\main.cpp" -o "F:\[...]\main.exe" -lstdc++ -L F:\Soft\Qt\5.15.2\mingw81_32\lib -l Qt5Widgets -l Qt5Core -I F:\Soft\Qt\5.15.2\mingw81_32\include
main.cpp
MainWindow