gpt4 book ai didi

C++ 单例用法 : compiler complains about private constructor

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:28 25 4
gpt4 key购买 nike

我知道有一百万个关于单例的问题和答案,但我似乎无法找到解决方案。所以冒着反对票的风险,这是我的问题:

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

标题:

class Singleton
{
static Singleton& Instance();
private:
Singleton(){};
Singleton(const Singleton&){};
Singleton& operator=(const Singleton&){};
~Singleton(){};
};

实现:

#include "s.hh"

Singleton& Singleton::Instance()
{
static Singleton instance;
return instance;
}

测试:

#include "s.hh"

int main(void)
{
Singleton& single = Singleton::Instance();
return 0;
}

现在,

$g++ A.cc s.cc  && ./a.out 
In file included from A.cc:1:0:
s.hh: In function ‘int main()’:
s.hh:3:19: error: ‘static Singleton& Singleton::Instance()’ is private
static Singleton& Instance();
^
A.cc:6:42: error: within this context
Singleton& single = Singleton::Instance();
^

这有什么问题?我卡住了……

最佳答案

默认情况下,类的成员是私有(private)的。要访问您的单例,您需要将 Singleton::Instance 设为 public:

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

private:
Singleton(){};
Singleton(const Singleton&){};
Singleton& operator=(const Singleton&){};
~Singleton(){};
};

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

关于C++ 单例用法 : compiler complains about private constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com