我正在尝试创建一个应该为我的轮盘程序实现一些方法的对象,但是在编译时我得到错误,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);
}
Run Code Online (Sandbox Code Playgroud)
//现在让我们试一试
Engine eng;
for(int i = 0; i < 20; ++i)
eng.spin();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
上面的代码打开一个std头文件,代码不容易理解
jua*_*nza 15
引擎std::mt19937在其构造函数中需要种子.你正在传递它std::random_device.看起来你打算做类似的事情
Engine::Engine() : m_generator(m_seed()), m_distribution(0, 36) {}
^^
Run Code Online (Sandbox Code Playgroud)
您还应确保m_seed在使用之前已初始化.这需要在之前声明m_generator:
private:
std::random_device m_seed;
std::mt19937 m_generator;
std::uniform_int_distribution<int> m_distribution;
Run Code Online (Sandbox Code Playgroud)
虽然我怀疑你真的不需要那个成员,但你可以说
Engine::Engine() : m_generator(std::random_device()()),
m_distribution(0, 36) {}
Run Code Online (Sandbox Code Playgroud)
看到这个实例.
| 归档时间: |
|
| 查看次数: |
5540 次 |
| 最近记录: |