gpt4 book ai didi

c++ - 在 C++ 类中使用

转载 作者:行者123 更新时间:2023-11-28 00:08:42 25 4
gpt4 key购买 nike

我想使用 <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);
}
};

我遇到了“骰子”未定义的问题,即使它在我的构造函数中也是如此。当我将我的分布定义移动到我的 roll 函数的开头时它会起作用,但是当我这样做时,我每次调用它时都会得到相同的数字。我尝试按照 this 上的答案进行操作问题,但我无法解决。

最佳答案

正如 drescherjm 所指出的,dice 是他构造函数中的局部变量。您需要使其在 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;
}

该程序是不言自明的。如果不是,请告诉我,我可以指导您完成。

关于c++ - 在 C++ 类中使用 <random>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34126262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com