我想<random>在我的程序中使用这个库,我将拥有不同分布的类,我想在我的程序中的不同时间生成一个数字。目前我的头文件中有以下内容
#include <random>
#include <time.h>
class enemy {
private:
int max_roll;
typedef std::mt19937 MyRng;
MyRng rng;
public:
enemy(int MR){
max_roll = MR;
rng.seed(time(NULL));
std::uniform_int_distribution<int> dice(1, max_roll);
}
int roll() {
return dice(rng);
}
};
Run Code Online (Sandbox Code Playgroud)
我遇到了“骰子”未定义的问题,即使它在我的构造函数中。当我将分布定义移到 roll 函数的开头时,它会起作用,但是当我这样做时,每次调用它时都会得到相同的数字。我试过按照这个问题的答案,但我无法解决。
小智 7
正如 drescherjm 指出的那样,dice 是 ctor 中的一个局部变量。您需要使其在 ctor 范围之外可访问。我已尝试在此处重新编写您的程序。我想你想要的是一个随机数生成器,它生成从 0 到 MR 的整数值?如果是这种情况,您可以使用以下重新设计的程序:
#include <random>
#include <time.h>
#include <iostream>
class enemy {
private:
std::random_device rd;
int max_roll;
typedef std::mt19937 MyRng;
MyRng rng;
std::uniform_int_distribution<int> dice;
public:
enemy(int MR) : max_roll(MR), rng(rd()), dice(std::uniform_int_distribution<>(1, MR)){
rng.seed(::time(NULL));
}
int roll() {
return dice(rng);
}
};
int main()
{
enemy en(6);
std::cout << "Roll dice produced : " << en.roll() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序是不言自明的。如果不是,请告诉我,我可以带您完成。