私は自分のコードにEigenのMatrixXd行列を使用しています。ある時点で私は3Dを必要とします。後で私はこの配列に値をアセスする必要がある、しかし固有ベクトルへのポインタの配列
Eigen::MatrixXd *CVM =new Eigen::MatrixXd[100];
for (int i = 0; i < 100; i++){
CVM[i]= Eigen::MatrixXd::Zero(5,5);
}
:それはちょうど、線形代数のために最適化されるよう固有ではなく、私がMatrixXd型のポインタの配列を作成しています、三次元マトリックスの種類を持っていないので、 b
は、ポインタではなくMatrixXd
そのもので、b(i,j)
は明らかに動作しませんので、代わりに私はcoeff()
メソッドを使用しています、しかし、私は次のようになるにつれ
for (int k = 0; k < 100; k++){
Eigen::MatrixXd* b=&CVM[k];
for (int i = 0; i < 5; i++){
for (int j = 0; j < 5; j++){
b->coeff(i,j)=47;
}
}
}
:、そしてそのために私のような何かをやっていますエラー:
error: assignment of read-only location ‘b->Eigen::Matrix<double, -1, -1>::<anonymous>.Eigen::PlainObjectBase<Derived>::coeff<Eigen::Matrix<double, -1, -1> >(((Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1> >::Index)i), ((Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1> >::Index)j))’
EDIT:(*b)(i,j)
、またはbのための参照を使用します:出力は、読み取り/書き込み参照、または逆参照bを取得するためにb->coeffRef(i,j)
を使用するか
cout << b << endl;
cout << CVM[47] << endl;
0x1c34b00
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
'C++'? [tag:C++] missing –
'b 'は何ですか?また、ポインタの配列がありません。オブジェクトを保持する動的に割り当てられた配列があります。 – juanchopanza
私はタイプミスがあると思います、2行目の 'a'は 'b'でしょうか? – ggael