分布作为全局变量
distribution as global variable
在我的项目中,我尝试使用均匀分布作为全局变量。
在一个文件 (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);
但我收到以下错误消息:
'sample' 没有命名类型
有什么建议吗?
你不能只在全局范围内这样做:
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
.
的未定义引用上收到链接器错误
在函数中编写代码
void func()
{
std::uniform_real_distribution<>::param_type Params(-0.3,0.3);
sample.param(Params);
}
在我的项目中,我尝试使用均匀分布作为全局变量。
在一个文件 (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);
但我收到以下错误消息:
'sample' 没有命名类型
有什么建议吗?
你不能只在全局范围内这样做:
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
.
在函数中编写代码
void func()
{
std::uniform_real_distribution<>::param_type Params(-0.3,0.3);
sample.param(Params);
}