访问单例类C++时出现问题

Trouble accessing a Singleton Class C++

本文关键字:问题 单例类 C++ 访问      更新时间:2023-10-16

我正在尝试为来自各个类的游戏数据的集中访问点编写一个单例类。这是我所拥有的...暂时只是通用的。

--> 辛格尔顿

#pragma once
class Singleton {
public:
static Singleton* instance;
static Singleton* Get();
private:
Singleton() {};
};
Singleton* Singleton::Get() {
instance = new Singleton();
return instance;
}

--> 总的来说.cpp我试图调用单例类的存在

#include "Singleton.h"
Singleton* single = Singleton::Get(); 

-->,我在MS Visual Studio中收到以下错误

LNK2001 未解析的外部符号"public: static class Singleton * Singleton::instance" (?instance@Singleton@@2PAV1@A( TimePilot84 E:\VC\TimePilot84\TimePilot84\main.obj 1

我不明白如何实例化这个类,如果它的构造函数是私有的,如果访问公共构造函数是公共的,但会产生错误

我意识到在调用 Get 函数中的构造函数之前,我没有测试该类是否存在,并且我还没有析构函数。

我只在main中对这个函数进行了一次调用,它不会编译。 感谢您的帮助。

您必须定义static成员。 这应该在.cpp文件中完成,而不是在标头中完成:

Singleton *Singleton::instance = nullptr;

另请注意,实例只能创建一次,因此Get()应如下所示:

Singleton *Singleton::Get()
{
if (!instance)
{
instance = new Singleton;
}
return instance;
}

或者,您可以放弃static成员变量并实现如下Get()

Singleton *Singleton::Get()
{
static Singleton instance;
return &instance;
}

后者具有在程序退出时调用 Singleton::~Singleton(( 的奖励效果。

您需要定义静态变量实例。在类声明后添加以下内容:

Singleton* Singleton::instance = nullptr;