我正在尝试制作一个随机数生成器,以生成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运行完全相同的代码,没有错误。
答案 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,则从异常派生的实现定义类型的值 无法初始化。