2

私のプログラミングでは、ユーザー定義の数のublas vectorを作成する必要があります。でこれをやりたいstd::generateです。ただし、コンパイルエラーが発生して、それが不可能になります。

私が使用しているコード:

for (size_t a_= 0; a_ < p_; a_++)
{
    ublas::vector<double> next_vhat(size_of_vec);
    std::generate(next_vhat.begin(), next_vhat.end(), mygen.give_rnd);
    v_hat_.push_back(next_vhat);
}

3 番目の引数 (「gen」、こちらを参照) として引数を持つ関数を使用できないclassため、関数呼び出し専用に作成する必要がありました。数値を正規分布にする必要があるため、関数呼び出しを分布関数には、引数として乱数ジェネレーターが含まれている必要がありますが、引数を指定して呼び出すことはできなかったので、これを行うクラスを作成する必要がありました。std::generate

私が書いたクラス:

class RandGen
{
public:
RandGen()
: generator()
, norm_dist(0.0,1.0)
, random_seed(static_cast<unsigned>(std::time(NULL)))
{}

double give_rnd() { return (double) norm_dist(generator); }

private:
base_gen_t generator;
boost::random::normal_distribution<double> norm_dist; //Standard normal    distribution
unsigned random_seed;
};

私が得ているエラー

全体をコンパイルしようとすると、次のエラーが発生します。

 error: cannot convert ‘RandGen::give_rnd’ from type ‘double (RandGen::)()’ to type ‘double (RandGen::*)()’

コンパイラがここで私に何をさせようとしているのか、あるいはなぜコンパイラがこれほど多くの問題を抱えているのか、私にはまったくわかりません。どんなアドバイスでも大歓迎です。

4

1 に答える 1