【问题标题】:Error in Singleton C++ [duplicate]Singleton C++中的错误[重复]
【发布时间】:2019-01-19 00:44:17
【问题描述】:

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

#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()。任何人都可以帮助找出错误的原因吗?

【问题讨论】:

标签: c++ c++11


【解决方案1】:

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

/** your singleton class definition **/

MySingleton* MySingleton::singletonInstance = nullptr;

/** rest of your code **/

【讨论】:

  • 确保在源文件中执行此操作,而不是在头文件中。标题中只有声明。
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 2012-07-27
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2016-03-30
相关资源
最近更新 更多