在标题中:
#ifndef MYCLASS_H
#define MYCLASS_H
#include <random>
#include <cmath>
// other includes...
class MyClass
{
public:
int GetResult();
private:
std::normal_distribution<double> *dist1;
std::default_random_engine rand;
int model_min, model_max;
int model_mean, model_sd;
int var1;
};
#endif
在 cpp
在初始化函数中:
var1 = 1000;
model_mean = 30;
model_sd = 12;
dist1 = new std::normal_distribution<double>( model_mean, model_sd );
model_min = 10;
model_max = 100;
在获得随机结果的函数中:
int MyClass::GetResult()
{
int result;
do {
result = 0.5f + (*dist1)(rand);
} while (result < model_min || result > model_max);
result = result * var1;
return result;
}
我调用初始化函数一次,然后调用 GetResult() 1000000 次。在 500 到 1000 次之后,返回的结果为 0。
我假设我在设置和使用 std::normal_distribution 或 std::default_random_engine 时犯了一个根本性错误。在 500-1000 次调用 GetResult 之后,var1 发生了一些奇怪的事情,它被设置为零。在将 var1 设置为 1000 后,我在代码中没有任何地方可以更改它。