c++ - 用 C++ 编写的单例模式中的一些错误
问题描述
#ifndef CONFIG_CPP
#define CONFIG_CPP
#include <mutex>
using namespace std;
class Config {
public:
static Config* GetDefult(){
if (p_instance == nullptr){
mutex_.lock();
if (p_instance == nullptr){
p_instance = new Config();
}
mutex_.unlock();
}
return p_instance;
}
private:
static Config* p_instance;
static mutex mutex_;
Config(){};
};
int main(){
auto t1 = Config::GetDefult();
}
#endif //CONFIG_CPP
这些消息在我跑步时出现
/tmp/ccKc2m2t.o: 在函数Config::GetDefult()': Config.cpp:(.text._ZN6Config9GetDefultEv[_ZN6Config9GetDefultEv]+0xc): undefined reference to
Config::p_instance' Config.cpp:(.text._ZN6Config9GetDefultEv[_ZN6Config9GetDefultEv]+0x16): 未定义对Config::mutex_' Config.cpp:(.text._ZN6Config9GetDefultEv[_ZN6Config9GetDefultEv]+0x22): undefined reference to
Config::p_instance' Config.cpp:(.text._ZN6Config9GetDefultEv[ ZN6Config9GetDefultEv]的引用+0x43):对Config::p_instance' Config.cpp:(.text._ZN6Config9GetDefultEv[_ZN6Config9GetDefultEv]+0x48): undefined reference to
Config::mutex ' Config.cpp:(.text._ZN6Config9GetDefultEv[_ZN6Config9GetDefultEv]+0x54) 的未定义引用:对 `Config::p_instance' collect2 的未定义引用:错误:ld 返回 1 个退出状态
解决方案
静态数据成员必须在源文件中的类声明之外进行初始化。它们具有全局范围,通常将多线程代码与静态代码混合不是一个好主意。
class Config {
...
};
Config* Config::p_instance = nullptr;
推荐阅读
- typo3 - 打字稿将每个第 4 个元素添加一个 div
- python - Pythonic 多态参数
- java - 如何克服java中println zoo中的错误
- c++ - 如何使用 openssl 获取 AES-CCM 解密的标签信息
- json - 插入一个大的字符串 JSON 作为突变 GRAPHQL 的输入
- spring - 创建名为“inMemoryDatabaseShutdownExecutor”的 bean 时出错:
- sql - SQL。如何使用循环?PostgreSQL
- c# - 如何在 c# 上将子集合添加到 firestore?
- node.js - 如何修复“类型错误无法读取未定义的属性 0”?
- android - 公用文件夹中保存的文件可见,但 PC 无法访问