2015-08-28 63 views
0

我试图做一个随机数发生器,产生0和999随机数生成C++在CMD

我做最初运行它从何处时间生成mt19937种子(之间的数字错误null),但发现这会导致该数字每秒更改一次,并且速度不够快,因为当我从for循环中再次调用它时。我使用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; 
} 

UPDATE:

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

+0

我已经签了一个网站,编译并执行你的代码,它运行没有问题 – user3341479

+0

代码::块是用C++ 11 以下选项兼容也被激活: “有G ++遵循C + +11 ISO C++语言标准[-std = C++ 11]“ – user3341479

+1

为什么你每次都重播? – RyanP

回答

0

你的函数永远不会返回一个值。既然你有一个int返回类型,你的函数必须返回一个可转换为int的东西。如果您不想返回任何内容,可以将您的功能更改为void

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

抛出:从异常衍生如果random_device 不能被初始化的实现定义类型的值。

+0

问题依然存在。 – user3341479

1

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

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

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

+0

我试过mt19937(time(NULL));但是这只会每秒更新一次。这并不快。 然后我可以找到一种方法来生成的唯一方法是强制for循环每秒钟打勾一次。 – user3341479

+0

你只种一次rng。 – twentylemon