错误LNK2019:Qt平台中未解析的外部符号C++
Error LNK2019: unresolved external symbol C++ in Qt platform
我遇到了这三个错误,我不知道为什么?我正在使用Qt程序,下面的代码在Qt小部件项目中。不包括主窗口.ui,因为我无论如何都无法更改它。目前的目标是将年龄放入行编辑中,如主窗口.cpp文件中所示。
我已经做了一些事情,比如卸载和重新安装Qt程序。将代码复制并粘贴到一个全新的项目中。将头文件添加到 cpp 文件等
错误:
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall person::~person(void)" (??1person@@QAE@XZ) referenced in function "public: virtual __thiscall MainWindow::~MainWindow(void)" (??1MainWindow@@UAE@XZ)
和
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall person::person(void)" (??0person@@QAE@XZ) referenced in function "public: __thiscall MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QAE@PAVQWidget@@@Z)
和
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: void __thiscall person::setAge(int)" (?setAge@person@@QAEXH@Z) referenced in function "private: void __thiscall MainWindow::on_lineEdit_returnPressed(void)" (?on_lineEdit_returnPressed@MainWindow@@AAEXXZ)
这是代码:
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <string>
#include "person.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_lineEdit_returnPressed();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
人.h
#ifndef PERSON_H
#define PERSON_H
class person
{
public:
int age;
person();
person(int);
~person();
int getAge();
void setAge(int age);
};
#endif // PERSON_H
主.cpp
#include "mainwindow.h"
#include "person.h"
#include <QApplication>
#include <string>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "person.h"
#include <string>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_lineEdit_returnPressed()
{
QString str = ui->lineEdit->text();
std::string age = str.toStdString();
x.setAge(stoi(age));
ui->lineEdit_2->setText(str);
}
人.cpp
#include "person.h"
using namespace std;
person::person(int age)
{
age = 0;
}
person::~person()
{
}
int getAge()
{
return age;
}
void setAge(int age)
{
age = newAge;
}
我已经搜索了又搜索,我所知道的是由于某种原因程序找不到setAge()方法或找不到人员类。我甚至问过其他了解 c++ 但不知道为什么会发生这种情况的人。请帮忙!
删除:
person x; //in the mainwindow.h file solves this problem but...
我收到错误:
C:UsersAdamDocumentsBody_fatmainwindow.cpp:22: error: C3861: 'setAge': identifier not found
void MainWindow::on_lineEdit_returnPressed()
{
QString str = ui->lineEdit->text();
std::string age = str.toStdString();
setAge(stoi(age));
ui->lineEdit_2->setText(str);
}
#include "person.h"
using namespace std;
person::person(int age)
{
age = 0;
}
person::~person()
{
}
int person::getAge() // <--
{
return age;
}
void person::setAge(int age) // <--
{
age = newAge;
}
你在类中,所以你必须使用命名空间,是的,这个错误有点烦人。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
这也需要纠正。 此外,您的主窗口.h和ui_mainwindow.h似乎也有相同的代码,这也是错误的。
你的人.cpp也失踪了
person::person( )
{
}
main.cpp 不需要字符串和 person.h,所以不需要在那里包含它。
完整的工作代码如下:
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "person.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_lineEdit_returnPressed();
private:
Ui::MainWindow *ui;
person p;
};
#endif // MAINWINDOW_H
主窗口.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;
}
void MainWindow::on_lineEdit_returnPressed()
{
QString str = ui->lineEdit->text();
std::string age = str.toStdString();
p.setAge( stoi( age ) );
ui->lineEdit_2->setText( str );
}
人.h
#ifndef PERSON_H
#define PERSON_H
class person
{
public:
int age;
person();
person(int);
~person();
int getAge();
void setAge(int age);
};
#endif // PERSON_H
人.cpp
#include "person.h"
person::person( )
{
}
person::person(int age)
{
age = 0;
}
person::~person()
{
}
int person::getAge()
{
return age;
}
void person::setAge(int age)
{
this->age = age;
}
如果这再次给您带来错误Run Qmake
相关文章:
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector