C ++:实用程序命名空间中的正态分布

时间:2018-04-01 06:00:25

标签: c++

我想创建一个实用程序命名空间,其中包含一个函数,该函数根据具有指定均值和方差的正态分布生成数字。

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 ++,需要很多指导。谢谢!

1 个答案:

答案 0 :(得分:0)

您不必将命名空间中的变量声明为extern。理解为什么有点棘手,我试着试一试。

您想要的是在命名空间中创建一个新变量。因此,您需要在命名空间中定义变量(即为其分配内存)。如果您将变量声明为extern,那么基本上就是说&#34;不要创建新的变量,我只是告诉您这个变量存在于某处,所以我可以在这里使用#34;。

然而,更好的方法是写一个小班。