C++ 访问单例类C++;
我正试图为来自不同类的游戏数据的集中访问点编写一个单例类。这是我所拥有的。。。现在只是普通的 -->辛格尔顿C++ 访问单例类C++;,c++,singleton,C++,Singleton,我正试图为来自不同类的游戏数据的集中访问点编写一个单例类。这是我所拥有的。。。现在只是普通的 -->辛格尔顿 #pragma once class Singleton { public: static Singleton* instance; static Singleton* Get(); private: Singleton() {}; }; Singleton* Singleton::Get() { instance = new Singleton(
#pragma once
class Singleton {
public:
static Singleton* instance;
static Singleton* Get();
private:
Singleton() {};
};
Singleton* Singleton::Get() {
instance = new Singleton();
return instance;
}
-->在main.cpp中,我试图调用Singleton类
#include "Singleton.h"
Singleton* single = Singleton::Get();
-->我在MS Visual Studio中遇到以下错误
LNK2001未解析的外部符号“公共:静态类Singleton*Singleton::instance”(?)?instance@Singleton@@2PAV1@A)TimePilot84 E:\VC\TimePilot84\TimePilot84\main.obj 1
如果这个类的构造函数是私有的,并且访问公共构造函数是公共的,那么我不理解如何实例化这个类
我意识到,在调用Get函数中的构造函数之前,我并不是在测试类是否存在,我还没有析构函数
我只在main中对这个函数进行了一次调用,它不会编译。感谢您的帮助。您必须定义
静态成员。这应该在.cpp文件中而不是在头文件中完成:
Singleton *Singleton::instance = nullptr;
还请注意,该实例只应创建一次,因此Get()
应如下所示:
Singleton *Singleton::Get()
{
if (!instance)
{
instance = new Singleton;
}
return instance;
}
或者,您可以放弃静态
成员变量,实现Get()
,如下所示:
Singleton *Singleton::Get()
{
static Singleton instance;
return &instance;
}
后者的额外效果是在程序退出时调用Singleton::~Singleton()。您需要定义静态变量实例。在类别声明后添加以下内容:
Singleton* Singleton::instance = nullptr;
一般推荐的单件处理方法:完美。。。非常感谢。它不允许我在标题中定义静态成员。正如你所写,我尝试了两种方法,它们都有效。最后我用了后者,更干净。