我正在尝试为来自不同类的游戏数据的集中访问点编写单例类 . 这就是我所拥有的...现在只是通用的 .
-
Singleton.h
#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未解析的外部符号“public:static class Singleton * Singleton :: instance”(?instance @ Singleton @@ 2PAV1 @ A)TimePilot84 E:\ VC \ TimePilot84 \ TimePilot84 \ main.obj 1
如果它的构造函数是私有的,如果访问公共构造函数是公共的,那么我不明白如何实例化这个类会产生错误
我意识到我没有在Get函数中调用构造函数之前测试该类是否存在,并且我还没有析构函数 .
我只在main中对这个函数进行一次调用,它不会编译 . 谢谢你的帮助 .
2 回答
您必须定义
static
成员 . 这应该在.cpp文件而不是 Headers 中完成:另请注意,实例只应创建一次,因此
Get()
应如下所示:或者,您可以抛弃
static
成员变量并实现Get()
,如下所示:后者具有在程序退出时调用Singleton :: ~Singleton()的额外效果 .
您需要定义静态变量实例 . 在声明课程后添加以下内容: