找不到档案:mainwindow.obj

时间:2013-04-07 15:35:26

标签: c++ qt

  1. 我创建了一个GUI应用程序 - > QMainWindow的
  2. 我在菜单+插槽中添加了1个项目。
  3. 我创建了一个新项目 - > QDialog的
  4. 我在插槽方法中尝试显示创建的对话框,但是我收到了这个错误:

    mainwindow.obj:-1:错误:LNK2019:未解析的外部符号“public:__ cdecl EditStudentDialog :: EditStudentDialog(class QWidget *)”(?? 0EditStudentDialog @@ QEAA @ PEAVQWidget @@@ Z)在函数“private”中引用:void __cdecl MainWindow :: on_actionNew_triggered(void)“(?on_actionNew_triggered @ MainWindow @@ AEAAXXZ)

    mainwindow.obj:-1:错误:LNK2019:未解析的外部符号“public:virtual __cdecl EditStudentDialog :: ~EditStudentDialog(void)”(?? 1EditStudentDialog @@ UEAA @ XZ)在函数“private:void __cdecl MainWindow”中引用:: on_actionNew_triggered(void)“(?on_actionNew_triggered @ MainWindow @@ AEAAXXZ)

  5. 这是主窗口:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void on_actionNew_triggered();
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "editstudentdialog.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_actionNew_triggered()
    {
        EditStudentDialog editDialog;
        editDialog.setModal(true);
        editDialog.exec();
    }
    

    这是对话框(只是一个空的,没有控件):

    #ifndef EDITSTUDENTDIALOG_H
    #define EDITSTUDENTDIALOG_H
    
    #include <QDialog>
    
    namespace Ui {
    class EditStudentDialog;
    }
    
    class EditStudentDialog : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit EditStudentDialog(QWidget *parent = 0);
        ~EditStudentDialog();
    
    private:
        Ui::EditStudentDialog *ui;
    };
    
    #endif // EDITSTUDENTDIALOG_H
    
    
    #include "editstudentdialog.h"
    #include "ui_editstudentdialog.h"
    
    EditStudentDialog::EditStudentDialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::EditStudentDialog)
    {
        ui->setupUi(this);
    }
    
    EditStudentDialog::~EditStudentDialog()
    {
        delete ui;
    }
    

    我做错了什么?

    编辑:这是.pro文件

    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = GUI1
    TEMPLATE = app
    
    
    SOURCES += main.cpp\
            mainwindow.cpp \
        editstudentdialog.cpp
    
    HEADERS  += mainwindow.h \
        editstudentdialog.h
    
    FORMS    += mainwindow.ui \
        editstudentdialog.ui
    

    PS:我试图清理项目然后构建它但仍然是同样的问题。

    编辑2:我正在使用Qt Creator 2.7和Qt 5.0.2

7 个答案:

答案 0 :(得分:21)

解决方案

  1. 右键点击项目&gt;清洁

  2. 右键点击项目&gt;运行qmake

  3. 右键点击项目&gt;构建

  4. 跑步 - 第一次工作

  5. 为什么会起作用

    这个工作的原因是因为Run qmake更新你的Makefile。出于某种原因,当您对项目进行更改(例如添加或删除文件)时,qt不会自动更新路径。运行qmake强制qt更新项目的路径,使其能够找到mainwindow.obj文件。您可能只需运行qmake就可以解决问题了。

答案 1 :(得分:6)

我刚刚经历过同样的问题。 “Build All”,“Rebuild All”,“Clean All”并没有帮助我解决“未解决的外部符号”问题。

然而,在我完全删除了构建目录(在我的情况下是C:\ dev \ projects \ qt \ build-qt-gui-test-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug)之后,重建就成了一个魅力。

希望这对你有帮助, 弗拉基米尔

答案 2 :(得分:5)

似乎没有正确创建editstudentdialog.obj文件。尝试清理项目(Build-&gt; Clean all)并再次构建它。如果它没有帮助检查是否将editstudentdialog.cpp添加到.pro文件中的SOURCES变量。如果仍然没有任何反应,请提供.pro文件。

编辑: 如下所述,您也可以尝试删除整个应用并重新创建。

答案 3 :(得分:3)

我只是想为其他人(主要是新手)添加这个答案,他们必须创建一个全新的项目来解决这个问题:

我的头文件中有一个额外的插槽定义,这阻止了整个应用程序的运行,并且给了我指向一个不是问题的函数的错误。仅供参考。

答案 4 :(得分:1)

可能发生这种情况的另一个原因是.pro文件引用了不存在的内容。它发生在我身上,一旦我删除了那些引用,错误就消失了。

答案 5 :(得分:0)

发生这种情况的另一个原因是,如果你的函数引用被声明为标题中的内联函数

答案 6 :(得分:0)

在我的例子中,修复是在错误消息中提到的QObject派生类的开头添加一个Q_OBJECT宏。我不知道为什么我没有收到更具体地指向丢失的宏的消息。