2016-05-15 548 views
0

我有一個名爲CMatrix的模板化矩陣庫,它與Eigen庫連接以獲得某些功能。爲了庫之間進行切換我有一個簡單函數:Eigen MatrixXd作爲返回類型

template <typename T> 
MatrixXd CMatrix<T>::ToMatrixXd() 
{ 
    const int nrow=m_row; 
    const int ncol=m_column; 
    MatrixXd matrixXd(nrow,ncol); 
    for(unsigned int i=0;i<nrow;i++) 
     for(unsigned int j=0;j<ncol;j++) 
      matrixXd(i,j)=GetCellValue(i,j); 

    return matrixXd; 
} 

在這裏,類型名T是原子的類型,如雙,浮子...

我調用該函數在另一個函數爲:

MatrixXd eigMat=m.ToMatrixXd(); 

我收到以下錯誤信息:

const math::CMatrix <double> as 'this' argument of 'Eigen::MatrixXd math::CMatrix<T>::ToMatrixXd() [with T = double; Eigen::MatrixXd = Eigen::Matrix <double, -1, -1>] discards qualifiers [-fpermissive]

看來,行數和列數保持爲負值,這是沒有意義的。我試過了:

MatrixXd eigMat(nrow,ncolumn) //both nrow and ncolumn positive 
eigMat=m.ToMatrixXd(); 

我還是得到了上面提到的錯誤信息。有什麼可能會發生錯誤?

+0

'MatrixXd eigMat = m.ToMatrixXd();'你在哪裏做'm'? – xaxxon

回答

0

**const** math::CMatrix <double> as 'this' argument

看來,在MatrixXd eigMat=m.ToMatrixXd();mconsttemplate <typename T> MatrixXd CMatrix<T>::ToMatrixXd()不是const方法。

+0

謝謝,的確非常漂亮!我總是把'const'標識符,但在這種情況下完全忘記了,並在錯誤消息中以不同方向導致行和列爲負。 – macroland