Sto usando matrici MatrixXd di Eigen sul mio codice e ad un certo punto ho bisogno di un 3D. Poiché Eigen non ha tipi di matrice tridimensionali, come è ottimizzato solo per algebra lineare, invece sto creando una matrice puntatore del tipo MatrixXd:Matrice di puntatori a Eigen Matrices
Eigen::MatrixXd *CVM =new Eigen::MatrixXd[100];
for (int i = 0; i < 100; i++){
CVM[i]= Eigen::MatrixXd::Zero(5,5);
}
Tuttavia, in seguito devo acess i valori in questo array , e per questo sto facendo qualcosa di simile:
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;
}
}
}
come b
è un puntatore e non il MatrixXd
sé, b(i,j)
ovviamente non avrebbe funzionato, così invece sto utilizzando il metodo coeff()
, tuttavia, ottengo il seguente errore:
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: Rese
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++] mancante –
Puoi mostrare cosa è 'b'? Inoltre, non hai una serie di puntatori. Si dispone di una matrice allocata dinamicamente contenente oggetti. – juanchopanza
Immagino che ci sia un errore di battitura, la seconda riga 'a' dovrebbe essere 'b'? – ggael