我已经阅读了 StackOverflow 中的一些 wiki,并为我的 Randomizer 类编写了以下头文件:
class Randomizer
{
public:
static Randomizer& instance(void);
int nextInt(int);
int nextInt(int, int);
int die(int);
double nextDouble(void);
char randomChar(const std::string&);
private:
Randomizer(void) {};
/* No implementation of the following methods */
Randomizer(Randomizer const&);
void operator= (Randomizer const&);
};
Run Code Online (Sandbox Code Playgroud)
我还在类内部实现了一些方法,例如 nextInt 等。
我不确定如何创建这个 Singleton 类的实例,即如何在 main() 中编写测试驱动器?
我试过:
int main()
{
Randomizer r;
r = Randomizer::instance();
}
Run Code Online (Sandbox Code Playgroud)
编译器说几个错误:
In file included from Randomizer.cpp:11:0:
Randomizer.h: In function ‘int main(int, char**)’:
Randomizer.h:22:9: error: ‘Randomizer::Randomizer()’ is private
Randomizer(void) {};
^
Randomizer.cpp:56:16: error: within this context
Randomizer r;
^
In file included from Randomizer.cpp:11:0:
Randomizer.h:25:14: error: ‘void Randomizer::operator=(const Randomizer&)’ is private
void operator= (Randomizer const&);
^
Randomizer.cpp:57:7: error: within this context
r = Randomizer::instance();
^
Run Code Online (Sandbox Code Playgroud)
感谢帮助。
此代码尝试复制 Randomizer 实例。如果不想直接使用instance()调用的结果,则应该取返回的引用:
Randomizer &r = Randomizer::instance();
Run Code Online (Sandbox Code Playgroud)
你是说你想要一个单身人士,但是:
Randomizer r;
Run Code Online (Sandbox Code Playgroud)
这Randomizer通过尝试调用默认的空构造函数来构造一个新实例。所以你没有将它用作单例,此外你还声明了构造函数私有。
r = Randomizer::instance();
Run Code Online (Sandbox Code Playgroud)
在这里,您试图将一个单例复制分配给另一个您明确声明为私有的单例。
也许您打算使用:
Randomizer &r = Randomizer::instance()
Run Code Online (Sandbox Code Playgroud)
const Randomizer& instance()如果随机化器本身没有可见状态,那么拥有一个方法而不是可变引用可能也更好。
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |