我想创建一个实用程序命名空间,其中包含一个函数,该函数根据具有指定均值和方差的正态分布生成数字。
MathUtils.hpp
#include <cmath>
#include <random>
namespace MathUtils {
double genNormalDist();
extern std::random_device rd;
extern std::mt19937 gen;
extern std::normal_distribution<> normalDist;
};
MathUtils.cpp
MathUtils::gen = rd();
MathUtils::normalDist = std::normal_distribution<double>(
0, sqrt(2/(inputNumber + outputNumber)));
\\Error here: Types 'long' and 'normal_distribution' are not compatible
double MathUtils::genNormalDist() {
return normalDist(gen);
}
程序的其他部分将调用MathUtils :: genNormalDist()。程序的其他部分不需要访问rd,gen或normalDist。实现这个的最佳方法是什么?
开始学习C ++,需要很多指导。谢谢!
答案 0 :(得分:0)
您不必将命名空间中的变量声明为extern
。理解为什么有点棘手,我试着试一试。
您想要的是在命名空间中创建一个新变量。因此,您需要在命名空间中定义变量(即为其分配内存)。如果您将变量声明为extern
,那么基本上就是说&#34;不要创建新的变量,我只是告诉您这个变量存在于某处,所以我可以在这里使用#34;。
然而,更好的方法是写一个小班。