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: エラー: メンバー 'transpose の要求' in '(0, 0)', これは非クラス型 'int' です。 result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose( );
ここで何が問題になる可能性がありますか?