首页 文章

无法访问Singleton C类

提问于
浏览
1

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

  • 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

    您必须定义 static 成员 . 这应该在.cpp文件而不是 Headers 中完成:

    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

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

    Singleton* Singleton::instance = nullptr;
    

相关问题