访问单例类C++时出现问题
Trouble accessing a Singleton Class C++
我正在尝试为来自各个类的游戏数据的集中访问点编写一个单例类。这是我所拥有的...暂时只是通用的。
--> 辛格尔顿
#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;
相关文章:
- C++ 实现模板单例类时出现链接错误
- 具有非默认构造函数的单例类
- 单例类析构函数无法清理 (SDL_Quit) MinGW
- 如何在单例类中管理变量状态?
- 访问单例类C++时出现问题
- 基于 IOKit 的 kext 驱动程序中的单例类
- 指向抽象模板单例类的指针向量C++?
- C++在单例类中创建类实例时遇到困难
- 如果我这样写,我的单例类会导致什么错误
- 这是一个有效的单例类吗?
- 函数内具有静态变量的单例类(迈耶实现)
- 继承的模板化单例类 c++ 中未定义的构造函数
- 为什么调用单例类 Qt 消息处理程序成员函数会出现错误:缺少参数列表
- C++:单例类设计(错误:未解析的外部符号)
- 构造函数在不同线程中的静态单例类上调用两次
- 如何在自定义单例类中使用log4cplus
- 为什么在C 中创建单例类创建期间静态函数参考静态变量
- 如何在静态单例类中以编程方式从exec方法返回
- 为什么在单例类中私有析构函数
- c++中的静态对象与单例类对象