2016-05-15 7 views
0

Ich habe eine Template-Matrix-Bibliothek mit dem Namen CMatrix, die für einige Funktionen mit der Eigenbibliothek verbunden ist. Um zwischen Bibliotheken zu wechseln Ich habe eine einfache Funktion:Eigen MatrixXd als Rückgabetyp

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

Hier ist der Typenname T Atomtypen wie Doppel, Schwimmer ...

ich diese Funktion in einer anderen Funktion aufrufen als:

MatrixXd eigMat=m.ToMatrixXd(); 

bekomme ich folgende Fehlermeldung:

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]

Es scheint, dass die Anzahl der Zeilen und Spalten negativ bleibt, was keinen Sinn ergibt. Ich habe versucht:

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

Ich bekomme immer noch die oben genannte Fehlermeldung. Was könnte falsch laufen?

+0

'MatrixXd eigMat = m.ToMatrixXd();' wo machst du 'm'? – xaxxon

Antwort

0

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

Es scheint, dass die m in MatrixXd eigMat=m.ToMatrixXd(); ist const aber template <typename T> MatrixXd CMatrix<T>::ToMatrixXd() kein const Methode.

+0

Danke, in der Tat sehr schöner Fang! Ich habe immer den 'const'-Bezeichner gesetzt, aber in diesem Fall komplett vergessen und wurde in eine andere Richtung geführt, wobei Zeilen und Spalten in der Fehlermeldung negativ waren. – macroland