Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LNK2019:单音中未解决的错误_C++_Qt_Lnk2019 - Fatal编程技术网

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文件无法编译。因此,如果您没有错误,您要么发布了错误的代码,要么该文件不是您项目的一部分。