c++ - 对 Singleton::instance 的未定义引用
问题描述
我正在尝试编写单例。当我编译它时,我得到了许多未定义的错误,比如instance
和mutex_
getSingleton()
对“Singleton::instance”的
未定义引用 对“Singleton::mutex_”的未定义引用
#include<iostream>
#include<string>
#include<mutex>
using namespace std;
class Singleton{
public:
static Singleton* getSingleton(){
if(instance == NULL){
mutex_.lock();
if(instance == NULL){
instance = new Singleton();
}
mutex_.unlock();
}
return instance;
}
private:
Singleton(){}
Singleton& operator =(const Singleton& ){}
static Singleton *instance;
static mutex mutex_;
};
int main(){
Singleton* singleton = Singleton::getSingleton();
return 0;
}
解决方案
您应该像那里一样将这个静态字段定义到 *.cpp 文件中
class Singleton{
public:
static Singleton* getSingleton(){
if(instance == NULL){
mutex_.lock();
if(instance == NULL){
instance = new Singleton();
}
mutex_.unlock();
}
return instance;
}
private:
Singleton(){}
Singleton& operator =(const Singleton& ){}
static Singleton *instance;
static mutex mutex_;
};
mutex Singleton::mutex_;
Singleton * Singleton::instance;
如果您使用单例 myers 和 c++11,则可以删除互斥锁:
class Singleton {
public:
static Singleton& Instance() {
static Singleton S;
return S;
}
private:
Singleton();
~Singleton();
};
推荐阅读
- amazon-web-services - ECS容器代理docker容器日志如何处理?
- google-bigquery - 大查询公共数据集事件/触发器?
- ms-access - Docmd.Findrecord 在文本框中查找
- angular - 如何在 WAR/EAR 中将 Angular 应用程序部署到 weblogic 服务器
- c++ - 自定义类分配给基元类型
- networking - 在 Icecast 中添加自定义标题以注销
- java - 使用和不使用 Executors.newSingleThreadExecutor
- makefile - makefile 失败 - 隐式规则编译一个目标文件,但不编译其余文件
- xslt - 测试包含在 XSLT 1.0 中使用不区分大小写的匹配
- python-3.x - 使用 Pandas 数据框进行优化