gpt4 book ai didi

c++ - C++单例模式代码无法运行,不知为何?

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:28 25 4
gpt4 key购买 nike

这是我的单例模型代码:

#include <iostream>
using namespace std;
class CSingleton
{
private:
CSingleton()
{
}
static CSingleton *m_pInstance;
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL)
m_pInstance = new CSingleton();
return m_pInstance;
}
};
int main() {
CSingleton* p1 = CSingleton::GetInstance();
return 0;
}

当我运行这段代码时,出现以下错误 apper undefined reference to CSingleton::m_pInstance,我不知道我哪里错了,我只想写一个单一的模型。有人能帮我吗?

最佳答案

在类之外(以及 main 之外),您需要定义那个变量,而不仅仅是声明它(如你的类(class)):

CSingleton *CSingleton::m_pInstance = nullptr;

您还会注意到我使用了 nullptr 而不是 NULL0 - 这是在现代 C++ 编译器。


下面的完整程序展示了如何做到这一点:

include <iostream>

class CSingleton {
private:
static CSingleton *m_pInstance;
CSingleton() {
std::cout << "Instantiating\n";
}
public:
static CSingleton *GetInstance() {
if (m_pInstance == nullptr) {
m_pInstance = new CSingleton();
}
std::cout << "Delivering\n";
return m_pInstance;
}
};
CSingleton *CSingleton::m_pInstance = nullptr;

int main() {
CSingleton* p1 = CSingleton::GetInstance();
CSingleton* p2 = CSingleton::GetInstance();
CSingleton* p3 = CSingleton::GetInstance();
return 0;
}

正如预期的那样,它输出:

Instantiating
Delivering
Delivering
Delivering

关于c++ - C++单例模式代码无法运行,不知为何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45180909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com