生成随机数(没有成员生成存在错误)

时间:2014-07-29 06:11:52

标签: c++ c++11 random

我正在尝试创建一个应该为我的轮盘程序实现某些方法的对象,但是在编译时我得到错误,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标题,代码不容易理解

1 个答案:

答案 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