C++ 未找到文件:mainwindow.obj 我创建了一个GUI应用程序->QMainWindow 我在菜单上加了一个项目+插槽 我创建了一个新项目->QDialog
我尝试使用slot方法显示创建的对话框,但出现以下错误: mainwindow.obj:-1:错误:LNK2019:未解析的外部符号“public:\u cdecl EditStudentDialog::EditStudentDialog(类QWidget*)”(???0EditStudentDialog)@@QEAA@PEAVQWidget@@@Z) 在函数“private:void\u cdecl主窗口::on\u actionNew\u triggered(void)”中引用(?on\u actionNew_triggered@MainWindow@@AEAAXXZ) mainwindow.obj:-1:错误:LNK2019:未解析的外部符号“public:virtual uu cdecl EditStudentDialog::~EditStudentDialog(void)”(??1EditStudentDialog@@UEAA@XZ)在函数“private:void\u cdecl主窗口::on\u actionNew\u triggered(void)”中引用(?on\u actionNew_triggered@MainWindow@@AEAAXXZ) 这是主窗口:C++ 未找到文件:mainwindow.obj 我创建了一个GUI应用程序->QMainWindow 我在菜单上加了一个项目+插槽 我创建了一个新项目->QDialog,c++,qt,C++,Qt,我尝试使用slot方法显示创建的对话框,但出现以下错误: mainwindow.obj:-1:错误:LNK2019:未解析的外部符号“public:\u cdecl EditStudentDialog::EditStudentDialog(类QWidget*)”(???0EditStudentDialog)@@QEAA@PEAVQWidget@@@Z) 在函数“private:void\u cdecl主窗口::on\u actionNew\u triggered(void)”中引用(?on\u
#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();
}
附言:我试图清理项目,然后建立它,但仍然是相同的问题
编辑2:我将Qt Creator 2.7与Qt 5.0.2一起使用,似乎editstudentdialog.obj文件创建不正确。尝试清理项目(Build->clean all),然后重新构建它。如果没有帮助,请检查是否已将editstudentdialog.cpp添加到.pro文件中的源变量中。如果仍然没有发生任何事情,请提供.pro文件 编辑:
正如下面提到的,您也可以尝试删除整个应用程序并重新创建它。我刚刚遇到了同样的问题。 “全部建造”、“全部重建”、“全部清理”并没有帮助我解决“未解决的外部符号”问题 但是,在我完全删除了构建目录(在我的例子中是C:\dev\projects\qt\build-qt-gui-test-Desktop\u qt\u 5\u 0\u 2\u MSVC2010\u 32bit-Debug)之后,重建工作非常顺利 希望这能帮助你, 弗拉基米尔解决方案
之所以这样做有效,是因为runqmake更新了您的Makefile。由于某些原因,当您对项目进行更改(例如添加或删除文件)时,qt不会自动更新路径。运行qmake会强制qt更新项目的路径,从而使其能够找到mainwindow.obj文件。您可能只需要运行qmake,您的问题就会得到解决。我只想为其他需要创建一个全新项目来解决问题的人(主要是noob)添加以下答案:
我的headers文件中有一个额外的插槽定义,它阻止了整个应用程序的运行,并给了我指向一个不是问题所在的函数的错误。仅供参考 出现这种情况的另一个原因是.pro文件引用了不存在的内容。这发生在我身上,一旦我删除了这些引用,错误就消失了。发生这种情况的另一个原因是,如果它引用的函数在标题中声明为内联函数在我的情况下,修复方法是在错误消息中提到的QObject派生类的开头添加一个Q_对象宏。我不知道为什么没有收到更明确地指向丢失宏的消息。您的代码构建得很好,我刚刚检查过。环境设置可能有问题。如果您正在使用QtCreator,请选中左侧面板上的“项目”选项卡。你会发现有“构建设置”,也许你会注意到一些奇怪的东西。无论如何,请尝试再次创建一个新项目并将代码粘贴到那里。我删除了应用程序,然后再次创建,现在它可以工作了。感谢您的帮助:)+1是的,我通常必须删除影子构建目录,因为Qt Creator中的一些奇怪的构建中断。面对同样的问题,只有这个答案有帮助。
#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;
}
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