我正在尝试创建一个应该为我的轮盘程序实现某些方法的对象,但是在编译时我得到错误,std :: random_device中没有成员生成
这是一个类示例:
#include <random>
class Engine
{
public:
Engine();
int spin();
private:
std::mt19937 m_generator;
std::uniform_int_distribution<int> m_distribution;
std::random_device m_seed;
};
Engine::Engine() :
m_generator(m_seed),
m_distribution(0, 36)
{
}
int Engine::spin()
{
return m_distribution(m_generator);
}
//现在让我们试一试
Engine eng;
for(int i = 0; i < 20; ++i)
eng.spin();
我做错了什么?
上面的代码打开一个std标题,代码不容易理解
答案 0 :(得分:13)
引擎std::mt19937
在其构造函数中需要种子。你传递的是std::random_device
。看起来你打算做一些像
Engine::Engine() : m_generator(m_seed()), m_distribution(0, 36) {}
^^
您还应该确保m_seed
在使用之前已初始化。这需要在m_generator
:
private:
std::random_device m_seed;
std::mt19937 m_generator;
std::uniform_int_distribution<int> m_distribution;
虽然我怀疑你并不真的需要那个成员,但你可以说
Engine::Engine() : m_generator(std::random_device()()),
m_distribution(0, 36) {}
请参阅此live example。