Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问单例类C++;_C++_Singleton - Fatal编程技术网

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;

一般推荐的单件处理方法:完美。。。非常感谢。它不允许我在标题中定义静态成员。正如你所写,我尝试了两种方法,它们都有效。最后我用了后者,更干净。