2017-01-19 2 views
0

, похоже, проблема со следующим кодом. Я получаю сообщение об ошибкенеквалифицированный идентификатор с классом Eigen

error: expected unqualified-id before numeric constant

Eigen::Matrix M_inv1_abc = pose_l.block<3, 3>(0, 0).inverse(); This is a code sample:

template<typename T> 
Eigen::Matrix<T, 4, 1> Function(Eigen::Matrix<T, 3, 4> pose_l) 
{ 

// fails here 
Eigen::Matrix<T, 3, 3> M_inv1 = pose_l.block<3, 3>(0, 0).inverse(); 

// this works, sample is from https://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html 
Eigen::MatrixXf m(4,4); 
Eigen::MatrixXf y(2,2); 
m << 1, 2, 3, 4, 
     5, 6, 7, 8, 
     9,10,11,12, 
    13,14,15,16; 
y = m.block<2,2>(1,1); 

} 

с образцом MatrixXf я не использую мой шаблон ...

я переименовал pose_l и M_inv1; в других сообщениях, например Expected unqualified-id before numeric constant for defining a number помогло переопределение, но не в моем случае.

Что мне не хватает?

Лучшие ManuKlause

+1

Смотрите эту страницу [] (http://eigen.tuxfamily.org/dox/TopicTemplateKeyword. html), вам нужно добавить ключевое слово шаблона перед блоком: 'pose_l.template block <3, 3> (0, 0)'. – ggael

+0

Спасибо, это помогло. Я хотел бы отметить ваше сообщение как решение, как я могу это сделать (новый в этом форуме ...) – ManuKlause

ответ

0

Попробуйте это (добавление круглые скобки вокруг подвыражении блока):

template<typename T> 
Eigen::Matrix<T, 4, 1> Function(Eigen::Matrix<T, 3, 4> pose_l) 
{ 
    Eigen::Matrix<T, 3, 3> M_inv1 = (pose_l.block<3, 3>(0, 0)).inverse(); 
    // ... 
} 
Смежные вопросы