2

Matlabの関数が機能するのと同じように、平均ベクトルと共分散行列の両方を持つ、C ++の多変量正規分布からランダムベクトルをサンプリングする方法を見つけようとしていますmvnrndこのページでこれを実装するクラスに関連するコードを見つけましたが、コンパイルに問題がありました。EigenMultivariateNormalmain.cpp に含まれるヘッダー ファイルを作成しました。クラスのオブジェクトを作成しようとしています。

MatrixXd MN(10,1);
MatrixXd CVM(10,10);

EigenMultivariateNormal <double,int> (&MN,&CVM) mvn;

問題は、コンパイル時にテンプレート関連のエラーが発生することです。

error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Scalar, int _size> class EigenMultivariateNormal’    
error:   expected a constant of type ‘int’, got ‘int’    
error: expected ‘;’ before ‘mvn’

私はテンプレートの操作方法について表面的な考えしか持っていません.cppの専門家ではないので、正確に何が間違っているのでしょうか? constどうやら、コードのどこかにあるはずです。

4

2 に答える 2

1

template<class _Scalar, int _size> class EigenMultivariateNormal特殊なテンプレート クラスです。最初class _Scalarは型をint _size要求しますが、int を要求します。

あなたがしたように、タイプ int の代わりに定数 int で呼び出す必要があります。次に、新しいクラス EigenMultivariateNormal をインスタンス化する構文が間違っています。代わりにこれを試してください:

EigenMultivariateNormal<double, 10> mvn (&MN, &CVM); // with 10 is the size
于 2013-05-03T14:31:57.270 に答える