无法访问Singleton Class C ++

时间:2018-05-31 03:42:01

标签: c++ singleton

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

- > 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 个答案:

答案 0 :(得分:1)

您必须定义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()的额外效果。

答案 1 :(得分:0)

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

Singleton* Singleton::instance = nullptr;