2013-05-31 193 views
5

我在我的代码上使用Eigen的MatrixXd矩阵,并且在某个点我需要一个3D。由于本征不具有三维基质的类型,因为它是只为线性代数优化,而不是我创建的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 
+0

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

+0

你能说明'b'是什么吗?另外,你没有一个指针数组。你有一个动态分配的数组存储对象。 – juanchopanza

+0

我想有一个错字,第二行'a'应该是'b'? – ggael

回答

4

要么使用b->coeffRef(i,j)得到一个读/写引用或取消引用B:(*b)(i,j),或使用B A参考:

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

只需使用运营商()(int,int)

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

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

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

这里k是矩阵,i是行,并且j是列。