【发布时间】:2018-08-02 03:59:37
【问题描述】:
我正在使用以下例程来生成从高斯/正态分布中选择的随机数:
当所有内容都在一个文件中进行编译时,它相当简单:
#include <iostream>
#include <math.h>
#include <random>
using namespace std;
int main()
{
double m;
double v;
int seed=100;
int samplesize=10;
double ls [samplesize]; //to store as a list
m = 0.0;
v = 0.05;
mt19937 e2(seed);
normal_distribution<float> dist(m, sqrt(v));
for (int i=0; i<samplesize; i++){
ls[i] = dist(e2);
cout << ls[i] << endl;
}
return 0;
}
现在我正在尝试做类似的事情,但我希望能够在全局范围内定义 e2 和 dist,或者只是首先在听众文件中 .h 然后在各种 .C 中调用它们我的程序的文件。
我的尝试不断遇到error: invalid use of non-static member function ‘std::mt19937 e2(int)’ 类型的错误。
目标是:
- 在头文件中定义
e2和dist。 - 在
.C文件中为e2播种,该文件加载一个参数文件,其中包含给定种子的位置。 - 在我的
.C文件中使用dist(e2)来生成这样的数字。
我的尝试:
在我写的头文件中:
#include <random>
std::mt19937 e2(int sd); //sd for seed to be read from file later.
std::normal_distribution<float> dist(double meanNormal, double varNormal); //define generally, mean and var to be read from file.
然后在我读取参数的setup.C 文件中,我尝试生成e2 和dist 的实例:
e2(seed); //seed read from file before.
dist(mean,sqrt(var)); //mean and var are double variables defined in this file.
现在在我的主程序文件中,当我尝试使用dist(e2) 从dist 生成一个数字时,我得到一个非静态成员函数错误,如上所示。
对于如何实现这一目标的任何帮助将不胜感激。
【问题讨论】:
标签: c++ random header-files gaussian normal-distribution