分配为全局变量

时间:2015-04-27 13:58:13

标签: c++ random global-variables

在我的项目中,我试图将统一分布用作全局变量。

在一个文件(global.h)中,我写道:

#include <random>
extern std::uniform_real_distribution<> sample;

然后,在另一个文件中,我想用:

初始化它(设置参数)
#include "global.h"
std::uniform_real_distribution<>::param_type Params(-0.3,0.3);
sample.param(Params);

但是我收到以下错误消息:
&#39;样本&#39;没有命名类型

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

你不能只在全球范围内这样做:

sample.param(Params);

您必须在某个功能中执行此操作:

void setupParams() {
    sample.param(std::uniform_real_distribution<>::param_type{-0.3, 0.3});
}

可以将其包含在其他类型的构造函数中:

class MyDistribution {
public:
    MyDistribution() {
        sample.param(std::uniform_real_distribution<>::param_type{-0.3, 0.3});
    }

private:
    std::uniform_real_distribution<> sample;
};

这样你就可以拥有:

// header
extern MyDistribution dist;

// the one cpp file
MyDistribution dist;

另外不要忘记extern只是声明一个变量。您仍然需要定义它 - 否则您将在sample的未定义引用上收到链接器错误。

答案 1 :(得分:0)

在函数中编写代码

void func()
{
    std::uniform_real_distribution<>::param_type Params(-0.3,0.3);
    sample.param(Params);
}