2016-05-15 9 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; 
} 

Здесь TYPENAME Т атомарные типы, такие как двойной, поплавок ...

Я называю эту функцию в другой функции, как:

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

кажется, что m в MatrixXd eigMat=m.ToMatrixXd(); является const но template <typename T> MatrixXd CMatrix<T>::ToMatrixXd() не const метод.

+0

Спасибо, действительно очень приятно поймать! Я всегда ставил идентификатор 'const', но в этом случае полностью забывал и вел в другом направлении, когда строки и столбцы были отрицательными в сообщении об ошибке. – macroland

Смежные вопросы