C++ Singleton 使用:编译器抱怨私有构造函数

ste*_*fen 4 c++ singleton design-patterns

我知道有一百万个关于单身人士的问题和答案,但我似乎找不到解决方案。因此,冒着投反对票的风险,这就是我的问题:

\n\n

我想使用 Andrei Alexandrescu 现代 C++ 设计中的单例实现:

\n\n

标头:

\n\n
class Singleton\n{\n    static Singleton& Instance();\n  private:\n    Singleton(){};\n    Singleton(const Singleton&){};\n    Singleton& operator=(const Singleton&){};\n    ~Singleton(){};\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

执行:

\n\n
#include "s.hh"\n\nSingleton& Singleton::Instance()\n{\n    static Singleton instance;\n    return instance;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试:

\n\n
#include "s.hh"\n\nint main(void)\n{\n    Singleton& single = Singleton::Instance();\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,

\n\n
$g++ A.cc s.cc  && ./a.out \nIn file included from A.cc:1:0:\ns.hh: In function \xe2\x80\x98int main()\xe2\x80\x99:\ns.hh:3:19: error: \xe2\x80\x98static Singleton& Singleton::Instance()\xe2\x80\x99 is private\n static Singleton& Instance();\n               ^\nA.cc:6:42: error: within this context\n  Singleton& single = Singleton::Instance();\n                                      ^\n
Run Code Online (Sandbox Code Playgroud)\n\n

这有什么问题吗?我被困住了...

\n

Dan*_*rey 5

默认情况下,类的成员是私有的。要访问您的单例,您需要公开Singleton::Instance

class Singleton
{
  // here!
  public:
    static Singleton& Instance();

  private:
    Singleton(){};
    Singleton(const Singleton&){};
    Singleton& operator=(const Singleton&){};
    ~Singleton(){};
};
Run Code Online (Sandbox Code Playgroud)

请注意,这不是构造函数(正如您在标题中所说),它是应该返回对单例的引用的静态成员函数。