2013-05-31 52 views
5

Tôi đang sử dụng ma trận MatrixXd từ Eigen trên mã của tôi và tại một thời điểm nhất định, tôi cần một 3D. Kể từ Eigen không có các loại ma trận tridimensional, vì nó được tối ưu hóa chỉ dành riêng cho đại số tuyến tính, thay vào đó tôi đang tạo ra một mảng con trỏ của các loại MatrixXd:Mảng con trỏ đến ma trận Eigen

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

Tuy nhiên, sau này tôi cần phải acess các giá trị về mảng này , và cho rằng tôi đang làm một cái gì đó như:

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

như b là một con trỏ và không phải là MatrixXd chính nó, b(i,j) rõ ràng sẽ không hoạt động, vì vậy thay vào đó tôi đang sử dụng phương pháp coeff(), tuy nhiên, tôi nhận được như sau lỗi:

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: gia tăng đầu ra

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++] thiếu –

+0

Bạn có thể hiển thị 'b' là gì không? Ngoài ra, bạn không có một mảng con trỏ. Bạn có một mảng sắp xếp mảng động được phân bổ động. – juanchopanza

+0

Tôi đoán có lỗi đánh máy, dòng thứ hai 'a' phải là 'b'? – ggael

Trả lời

4

Hoặc sử dụng b->coeffRef(i,j) để có được một tài liệu tham khảo đọc/ghi, hoặc dereference b: (*b)(i,j), hoặc sử dụng một tài liệu tham khảo cho b:

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

Chỉ cần sử dụng toán tử() (int, int)

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

hoặc

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

hoặc

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

đây k là ma trận, i là liên tiếp, và j là cột.

Các vấn đề liên quan