C++ LNK2019:单音中未解决的错误
我需要帮助找出该代码的错误:C++ LNK2019:单音中未解决的错误,c++,qt,lnk2019,C++,Qt,Lnk2019,我需要帮助找出该代码的错误: class DatabaseEngine { protected: DatabaseEngine(); static DatabaseEngine* m_DatabaseEngine; public: static DatabaseEngine& instance(); void do_something(); }; cpp: userwindow.cpp: #include "databaseengine.h" Users
class DatabaseEngine
{
protected:
DatabaseEngine();
static DatabaseEngine* m_DatabaseEngine;
public:
static DatabaseEngine& instance();
void do_something();
};
cpp:
userwindow.cpp:
#include "databaseengine.h"
UsersWindow::UsersWindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::UsersWindow)
{
ui->setupUi(this);
DatabaseEngine::instance().do_something();
}
UsersWindow::~UsersWindow()
{
delete ui;
}
userswindow.obj:-1:错误:LNK2019:未解析的外部符号“public:static class DatabaseEngine&u cdecl DatabaseEngine::instance(void)”(?instance@DatabaseEngine@@SAAAV1@XZ)在函数“public:u thiscall UsersWindow::UsersWindow(类QWidget*)”中引用(??0UsersWindow@@QAE@PAVQWidget@@@Z)
userswindow.obj:-1:错误:LNK2019:未解析的外部符号“public:void\u thiscall DatabaseEngine::do\u something(void)”(?do_something@DatabaseEngine@@QAEXZ)在函数“public:u thiscall UsersWindow::UsersWindow(类QWidget*)”中引用(??0UsersWindow@@QAE@PAVQWidget@@@Z)
谢谢我认为您需要从静态函数定义中删除
static
关键字:
DatabaseEngine& DatabaseEngine:: instance() {
// code here
}
错:
static DatabaseEngine& DatabaseEngine::instance()
正确:
DatabaseEngine& DatabaseEngine::instance()
声明:
static DatabaseEngine& DatabaseEngine::instance();
^
only in declaration
定义:
DatabaseEngine& DatabaseEngine:: instance() {
// code here
}
另外,请确保项目中包含了DatabaseEngine.cpp文件,并且正在编译该文件您可以在静态方法实例中使用静态变量来保存唯一实例并返回指针。这也是一个聪明的建议从有效的C++我认为。该示例未经测试,但应该有效
class DatabaseEngine
{
public:
static DatabaseEngine& instance(){
static DatabaseEngine db;
return db;
}
};
在我看来,DatabaseEngine的cpp文件似乎没有包含在项目中,因此Visual Studio没有编译该代码。顺便说一句,我认为这是两个答案都提到的错误的原因之一。我看到您的.cpp文件无法编译。因此,如果您没有错误,您要么发布了错误的代码,要么该文件不是您项目的一部分。