2013-05-31 10 views
5

Ich verwende MatrixXd Matrizen von Eigen auf meinem Code, und an einem bestimmten Punkt brauche ich ein 3D. Da Eigen nicht über tridimensional Typen Matrix, da es nur für lineare Algebra optimiert, stattdessen einen Zeiger-Array des MatrixXd Typ Ich schaffe:Array von Zeigern zu Eigen Matrizen

Eigen::MatrixXd *CVM =new Eigen::MatrixXd[100]; 
for (int i = 0; i < 100; i++){ 
    CVM[i]= Eigen::MatrixXd::Zero(5,5); 
} 

jedoch später muss ich auf diesem Array die Werte Acess und für das ich tue so etwas wie:

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; 
     }  
    } 
} 

Als b ist ein Zeiger und nicht die MatrixXd selbst, b(i,j) offensichtlich nicht funktionieren würde, so stattdessen ich die coeff() Methode verwende, jedoch bekomme ich folgende Fehler:

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: Ausgabe hinzugefügt

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 
+0

'C++'? [tag: C++] fehlt –

+0

Können Sie zeigen, was "b" ist? Außerdem haben Sie kein Array von Zeigern. Sie haben ein dynamisch zugewiesenes Array mit Objekten. – juanchopanza

+0

Ich denke, es gibt einen Tippfehler, zweite Zeile 'a' sollte 'b' sein? – ggael

Antwort

4

Entweder b->coeffRef(i,j) verwenden, um eine Lese/Schreib-Referenz zu erhalten, oder dereferenzieren b: (*b)(i,j) oder eine Referenz für b verwenden:

MatrixXd& b = CVM[k]; 
b(i,j) = 47; 
1

Nur Operator() (int, int)

CVM[k].operator()(i,j) = 47; 

oder

CVM[k](i,j) = 47; 

oder

Eigen::MatrixXd* b = &CVM[k]; 
b->operator()(i,j) = 47; 

Hier ist die Matrix K, i die Zeile und j die Spalte.