コードで Eigen の MatrixXd 行列を使用していますが、ある時点で 3D 行列が必要になります。Eigen は線形代数のみに最適化されているため、3 次元の行列型を持たないため、代わりに MatrixXd 型のポインター配列を作成しています。
Eigen::MatrixXd *CVM =new Eigen::MatrixXd[100];
for (int i = 0; i < 100; i++){
CVM[i]= Eigen::MatrixXd::Zero(5,5);
}
ただし、後でこの配列の値にアクセスする必要があり、そのために次のようなことをしています。
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;
}
}
}
それ自体でb
はなくポインターであるため、明らかに機能しないため、代わりにメソッドを使用していますが、次のエラーが発生します。MatrixXd
b(i,j)
coeff()
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))’
編集:出力が追加されました
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