CMD中的随机数生成器C ++错误

时间:2015-08-28 16:06:45

标签: c++ c++11 random

我正在尝试制作一个随机数生成器,以生成0到999之间的数字。

我最初运行的是mt19937的种子是从时间(null)生成的,但发现这会导致数字每秒更改一次,并且当我从内部再次调用它时速度不够快for loop。

我正在使用code :: blocks来编译我的代码,它编译时没有错误,但是当我运行代码时我在cmd中出错。

Error: terminate called after throwing an instance of 'std::runtime_error'
  what():  random_device::random_device(const std::string&)

我做错了什么?

#include <iostream>
#include <random>

using namespace std;

//Random Number Generator
int numGen() {

    //Random Number Generator
    random_device rd;
    mt19937 mt(rd());
    uniform_int_distribution<int> dist(0, 999);

    for (int I = 0; I < 6; i++) {
        cout <<dist(mt) << " ";
    }

    cout <<endl;
}

更新:

我现在从Visual Studio运行完全相同的代码,没有错误。

2 个答案:

答案 0 :(得分:1)

std::random_device实际上并不需要实施。

http://www.cplusplus.com/reference/random/random_device/

第3段。如果设备不好,他们会抛出异常。尝试使用不同的种子RNG。

答案 1 :(得分:0)

您的函数永远不会返回值。由于您有int返回类型,因此您的函数必须返回可转换为int的内容。如果您不想返回任何内容,可以将功能更改为void

由于您的异常引用了构造函数名称,因此无法创建随机设备。 C ++ 14标准26.5.6.4具有

  

抛出:如果random_device,则从异常派生的实现定义类型的值   无法初始化。