0

我正在尝试编写一个从 double 或 float 类型获取 Eigen::Matrix 的函数。此函数适用于浮点数:

Eigen::Matrix<float, 4, 4> foo(const Eigen::Matrix<float, 4, 4> &T)
{
   Eigen::Matrix<float, 4, 4> result;
   result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose();
   return result;
}

但是,一旦我将“浮动”作为模板:

template <typename Scalar>
inline Eigen::Matrix<Scalar, 4, 4> foo(const Eigen::Matrix<Scalar, 4, 4> &T)
{
   Eigen::Matrix<Scalar, 4, 4> result;
   result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose();
   return result;
}

我在 linux 上使用 gcc 4.9.1 得到这个错误:

.../utils.hpp:在函数'Eigen::Matrix core::math::foo(const Eigen::Matrix&)'中:.../utils.hpp:77:47:错误:请求成员'转置' in '(0, 0)',属于非类类型 'int' result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose( );

这里可能是什么问题?

4

1 回答 1

3

一旦函数是模板,一些调用依赖于模板,因此您必须添加一些template关键字,请尝试:

template <typename Scalar>
inline Eigen::Matrix<Scalar, 4, 4> foo(const Eigen::Matrix<Scalar, 4, 4> &T)
{
   Eigen::Matrix<Scalar, 4, 4> result;
   result.template block<3,3>(0,0) = T.template block<3,3>(0,0).transpose();
   return result;
}
于 2014-10-02T08:40:01.620 回答