错误:未定义对 MainWindow::~MainWindow 的引用 |gcc、VSCode 下的 Qt

Error : undefined reference to MainWindow::~MainWindow | Qt under gcc, VSCode

提问人:Placetor 提问时间:2/4/2022 更新时间:2/4/2022 访问量:877

问:

我将一个项目从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(称我为迷信),但无济于事。

C++ Qt visual-studio-code 链接器错误

评论

1赞 drescherjm 2/4/2022
在你只是在编译.您忘了编译实现 .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\includemain.cppMainWindow
0赞 drescherjm 2/4/2022
另外,您如何运行 moc 和 uic(可能还有 rcc)?要将 VSCode 与 Qt 框架一起使用,您可能应该使用 CMake 和 CMake 工具扩展。手动指定所有步骤的工作量/有些困难,尤其是当您的项目变得更加复杂时。

答: 暂无答案