Singleton C ++中的错误

时间:2018-08-11 18:55:03

标签: c++ c++11

我正在尝试创建线程安全的单例类,这是我的代码:

#include<iostream>
#include<mutex>

using namespace std;
std::mutex mtx;

class MySingleton{
private:
    static MySingleton * singletonInstance;
    MySingleton();
    MySingleton(const MySingleton&);
    const MySingleton& operator=(const MySingleton&);
    ~MySingleton();
public:
    static MySingleton* GetInstance();
    void foo();
};

MySingleton::MySingleton(){
    std::cout << "Ctor\n";
};

MySingleton::~MySingleton(){
    std::cout << "Dtor\n";
};

void MySingleton::foo()
{
    cout << "Inside Foo" << endl;
}

MySingleton* MySingleton::GetInstance(){
    //double check
    if (singletonInstance == NULL){
        std::lock_guard<std::mutex> lock(mtx);
        if (singletonInstance == NULL)
            singletonInstance = new MySingleton();
    }
    return singletonInstance;
}

int main(void){
    MySingleton::GetInstance()->foo();
}

我在VS2015中执行了此代码,发现了以下错误

1>Source.obj : error LNK2001: unresolved external symbol "private: static class MySingleton * MySingleton::singletonInstance" (?singletonInstance@MySingleton@@0PAV1@A)
1>E:\CPP\Test\Debug\Singleton.exe : fatal error LNK1120: 1 unresolved externals

我不确定代码中缺少什么,只想用单例实例调用foo()。谁能帮忙找出错误原因?

1 个答案:

答案 0 :(得分:2)

在C ++中,您需要在类之外的{em>源(.cpp)文件中初始化static成员 ,如下所示:

/** your singleton class definition **/

MySingleton* MySingleton::singletonInstance = nullptr;

/** rest of your code **/