参考博客:https://www.cnblogs.com/wongyi/p/8734346.html

1. 数据类型报错

/home/wy/workdir/slambook/ch3/useEigen/build> make -j2
Scanning dependencies of target eigenMatrix
[ %] Building CXX object CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o
In file included from /usr/include/eigen3/Eigen/Core::,
from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::
/usr/include/eigen3/Eigen/src/Core/Product.h: In instantiation of ‘struct Eigen::internal::product_result_scalar<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, Eigen::DenseShape, Eigen::DenseShape>’:
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘struct Eigen::internal::traits<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::: required from here
/usr/include/eigen3/Eigen/src/Core/Product.h::: error: no type named ‘ReturnType’ in ‘struct Eigen::internal::scalar_product_traits<float, double>’
typedef typename scalar_product_traits<typename Lhs::Scalar, typename Rhs::Scalar>::ReturnType Scalar;
^
In file included from /usr/include/eigen3/Eigen/Core::,
from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::
/usr/include/eigen3/Eigen/src/Core/DenseBase.h: In instantiation of ‘class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >’:
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: required from ‘class Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::: required from here
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::operator*;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::operator/;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::derived;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::const_cast_derived;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::rows;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::cols;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::size;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::rowIndexByOuterInner;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::colIndexByOuterInner;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::coeff;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::coeffByOuterInner;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::operator();
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::operator[];
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::x;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::y;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::z;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::w;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::stride;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::innerStride;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::outerStride;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::rowStride;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h::: error: using-declaration for non-member at class scope
using Base::colStride;
^
In file included from /usr/include/eigen3/Eigen/Core::,
from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h: In instantiation of ‘class Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >’:
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::: required from here
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::derived’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::derived;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::const_cast_derived’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::const_cast_derived;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::rows’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::rows;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::cols’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::cols;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::size’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::size;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::coeff’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::coeff;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::coeffRef’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::coeffRef;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::eval’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::eval;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::operator*=’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::operator*=;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::operator/=’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::operator/=;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::operator*’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::operator*;
^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h::: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}::operator/’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, > >}’
using Base::operator/;
^
In file included from /usr/include/eigen3/Eigen/Core::,
from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::
/usr/include/eigen3/Eigen/src/Core/Product.h: In instantiation of ‘class Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>’:
/usr/include/eigen3/Eigen/src/Core/Product.h::: required from ‘class Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::: required from here
/usr/include/eigen3/Eigen/src/Core/util/Macros.h::: error: no members matching ‘Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}::derived’ in ‘Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}’
using Base::derived; \
^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h::: note: in expansion of macro ‘EIGEN_GENERIC_PUBLIC_INTERFACE’
EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \
^
/usr/include/eigen3/Eigen/src/Core/Product.h::: note: in expansion of macro ‘EIGEN_DENSE_PUBLIC_INTERFACE’
EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h::: error: no members matching ‘Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}::const_cast_derived’ in ‘Eigen::ProductImpl<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , Eigen::Dense>::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}’
using Base::const_cast_derived;
^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h::: note: in expansion of macro ‘EIGEN_GENERIC_PUBLIC_INTERFACE’
EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \
^
/usr/include/eigen3/Eigen/src/Core/Product.h::: note: in expansion of macro ‘EIGEN_DENSE_PUBLIC_INTERFACE’
EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
^
/usr/include/eigen3/Eigen/src/Core/Product.h: In instantiation of ‘class Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >’:
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::: required from here
/usr/include/eigen3/Eigen/src/Core/util/Macros.h::: error: no members matching ‘Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}::derived’ in ‘Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}’
using Base::derived; \
^
/usr/include/eigen3/Eigen/src/Core/Product.h::: note: in expansion of macro ‘EIGEN_GENERIC_PUBLIC_INTERFACE’
EIGEN_GENERIC_PUBLIC_INTERFACE(Product)
^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h::: error: no members matching ‘Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}::const_cast_derived’ in ‘Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, , >}’
using Base::const_cast_derived;
^
/usr/include/eigen3/Eigen/src/Core/Product.h::: note: in expansion of macro ‘EIGEN_GENERIC_PUBLIC_INTERFACE’
EIGEN_GENERIC_PUBLIC_INTERFACE(Product)
^
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp: In function ‘int main(int, char**)’:
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::: error: conversion from ‘const Eigen::Product<Eigen::Matrix<float, , >, Eigen::Matrix<double, , >, >’ to non-scalar type ‘Eigen::Matrix<double, , >’ requested
Eigen::Matrix<double, , > result_wrong_type = matrix_23 * v_3d;
^
CMakeFiles/eigenMatrix.dir/build.make:: recipe for target 'CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o' failed
make[]: *** [CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o] Error
CMakeFiles/Makefile2:: recipe for target 'CMakeFiles/eigenMatrix.dir/all' failed
make[]: *** [CMakeFiles/eigenMatrix.dir/all] Error
Makefile:: recipe for target 'all' failed
make: *** [all] Error
*** Failure: Exit code ***

问题分析

在Eigen中不能混合两种不同类型的矩阵,Eigen不会执行自动类型转换,需要手动进行显式转换。

编译如下代码即会得到上述错误,

Eigen::Matrix<float, , > matrix_23;
Eigen::Vector3d v_3d; matrix_23 << , , , , , ;
v_3d << , , ; Eigen::Matrix<double, , > result_ = matrix_23 * v_3d;

更正代码如下,

Eigen::Matrix<float, , > matrix_23;
Eigen::Vector3d v_3d; matrix_23 << , , , , , ;
v_3d << , , ; Eigen::Matrix<double, , > result_ = matrix_23.cast<double>() * v_3d; // 显式类型转换

2. 矩阵维度报错

/home/wy/workdir/slambook/ch3/useEigen/build> make -j2
Scanning dependencies of target eigenMatrix
[ %] Building CXX object CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o
In file included from /usr/include/eigen3/Eigen/Core::,
from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::
/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h: In instantiation of ‘void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Matrix<double, , , , , >; Src = Eigen::Product<Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<float, double>, const Eigen::Matrix<float, , > >, Eigen::Matrix<double, , >, >; Func = Eigen::internal::assign_op<double>]’:
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h::: required from ‘Derived& Eigen::PlainObjectBase<Derived>::_set_noalias(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<float, double>, const Eigen::Matrix<float, , > >, Eigen::Matrix<double, , >, >; Derived = Eigen::Matrix<double, , , , , >]’
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h::: required from ‘Eigen::PlainObjectBase<Derived>::PlainObjectBase(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<float, double>, const Eigen::Matrix<float, , > >, Eigen::Matrix<double, , >, >; Derived = Eigen::Matrix<double, , , , , >]’
/usr/include/eigen3/Eigen/src/Core/Matrix.h::: required from ‘Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::Matrix(const Eigen::EigenBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<float, double>, const Eigen::Matrix<float, , > >, Eigen::Matrix<double, , >, >; _Scalar = double; int _Rows = ; int _Cols = ; int _Options = ; int _MaxRows = ; int _MaxCols = ]’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp::: required from here
/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h::: error: ‘YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES’ is not a member of ‘Eigen::internal::static_assertion<false>’
if (Eigen::internal::static_assertion<static_cast<bool>(CONDITION)>::MSG) {}
^
/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h::: note: in expansion of macro ‘EIGEN_STATIC_ASSERT’
EIGEN_STATIC_ASSERT( \
^
/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h::: note: in expansion of macro ‘EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE’
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned,Src)
^
CMakeFiles/eigenMatrix.dir/build.make:: recipe for target 'CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o' failed
make[]: *** [CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o] Error
CMakeFiles/Makefile2:: recipe for target 'CMakeFiles/eigenMatrix.dir/all' failed
make[]: *** [CMakeFiles/eigenMatrix.dir/all] Error
Makefile:: recipe for target 'all' failed
make: *** [all] Error
*** Failure: Exit code ***

问题分析

当矩阵运算的行和列不匹配时,即会出现上述报错,代码如下,

Eigen::Matrix<float, , > matrix_23;
Eigen::Vector3d v_3d; matrix_23 << , , , , , ;
v_3d << , , ; Eigen::Matrix<double, , > result_ = matrix_23.cast<double>() * v_3d;

解决方案

Eigen::Matrix<double, , > result_ = matrix_23.cast<double>() * v_3d;

3. 数据类型报错

/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h: In instantiation of ‘void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Matrix<float, , >; Src = Eigen::Matrix<double, , >; Func = Eigen::internal::assign_op<float>]’:
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h::: required from ‘Derived& Eigen::PlainObjectBase<Derived>::_set_noalias(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, , >; Derived = Eigen::Matrix<float, , >]’
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h::: required from ‘Eigen::PlainObjectBase<Derived>::PlainObjectBase(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, , >; Derived = Eigen::Matrix<float, , >]’
/usr/include/eigen3/Eigen/src/Core/Matrix.h::: required from ‘Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::Matrix(const Eigen::EigenBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, , >; _Scalar = float; int _Rows = ; int _Cols = ; int _Options = ; int _MaxRows = ; int _MaxCols = ]’
/home/gordon/ros_ws/src/ndtMap/src/ndtmap_2frame.cpp::: required from here
/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h::: error: static assertion failed: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
#define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
^
/usr/include/eigen3/Eigen/src/Core/util/XprHelper.h::: note: in expansion of macro ‘EIGEN_STATIC_ASSERT’
EIGEN_STATIC_ASSERT((internal::functor_is_product_like<BINOP>::ret \
^
/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h::: note: in expansion of macro ‘EIGEN_CHECK_BINARY_COMPATIBILIY’
EIGEN_CHECK_BINARY_COMPATIBILIY(Func,typename ActualDstTypeCleaned::Scalar,typename Src::Scal

问题分析

初步猜想是数据类型错误,然而错误藏得比较深,一直没有排查出来。最后终于发现原因如下,

程序中创建了一个 pcl::NormalDistributionsTransform 对象NDT,该对象的成员函数需要接收一个4x4的矩阵变量。

于是乎,随手就创建了一个 Eigen::Matrix4d 类型的变量。

通过检查定义 pcl::NormalDistributionsTransform 类的头文件,发现其成员函数默认接收的4x4矩阵变量居然是float!

解决方案

更改矩阵变量的数据类型,如下所示,

Eigen::Matrix4f init_guess;
init_guess = Eigen::Matrix4f::Identity();

使用Eigen遇到恶心报错的更多相关文章

  1. 编译依赖ndt_gpu库的包,遇到Eigen报错

    背景: 使用NDT建图,帧率比较慢,打算使用gpu加速计算. ndt_gpu是一个使用gpu加速ndt计算的库,首先在工作空间编译这个包. 然后在ndtMap包中链接这个库,其CMakelists.t ...

  2. iOS报错Expected selector for Objective-C method

    这个报错非常恶心:原因竟然是在导入头文件的地方多写了一个"+"号,可能问题在一个文件,报错在另一个文件

  3. dubbo控制器xml文件报错

    在配置dubbo服务的过程中,经常会遇到虽然程序能够跑起来,但是配置文件一堆红叉,虽然不影响功能,但是确实很让人恶心. 报错信息如下: Multiple annotations found at th ...

  4. (已解决) eclipse提示报错"serializing cdt project settings"解决方案

    最近在使用eclipse作为cocos2dx的交叉编译工具.但是某天突然相关工程打不开,打开eclipse直接提示 “serializing cdt project settings” has enc ...

  5. 关于dubbo服务的xml配置文件报错的问题

    在配置dubbo服务的过程中,经常会遇到虽然程序能够跑起来,但是配置文件一堆红叉,虽然不影响功能,但是确实很让人恶心. 报错信息如下: Multiple annotations found at th ...

  6. Google Review中Zlib.Portable报错的一种排查解决方案

    前几天遇到一个恶心的问题,跟同事一块解决了,在这里记录下过程. 比较懒,直接转他的blog: http://www.cnblogs.com/caochenghua/p/6530053.html 报错信 ...

  7. Skype坑爹报错:“旧版本无法删除,请联络您的技术支持小组 ”的解决办法

    真是恶心的让人想吐的报错.现在终于解决了,跟大家分享一下方法. 先给问题截个图,如下 首先当我去搜解决办法之前,我已经在[控制面板]的[卸载程序]里把Skype删除了,真是让我后悔不已的操作啊!!因为 ...

  8. Exception occurred during processing request: null报错

    报错, 恶心的一笔. 报错的地方 解决方法: 没注意到...

  9. SSM整合报错org.springframework.beans.factory.UnsatisfiedDependencyException

    我解决的办法是把.m2仓库所有文件删除,重新maven project就可以了. 但是在做这一步之前,报错如下: ①org.springframework.beans.factory.Unsatisf ...

随机推荐

  1. PTA 7-20 表达式转换

    转自:https://www.cnblogs.com/yuxiaoba/p/8399934.html 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元 ...

  2. [转帖]2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起【组图】

    2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起[组图] https://www.qianzhan.com/analyst/detail/220/190215-4b1d6868.ht ...

  3. linux-yum-downloadonly 下载rpm安装包到本地

    注意 注意1:如果机器,本来就安装了相应的rpm包,则该rpm包不会下载. 参考 centos7离线安装rpm包自动解决依赖 查看linux系统版本信息(Oracle Linux.Centos Lin ...

  4. 洛谷 P2467 地精部落 题解

    题面 好难啊好难啊好难啊~(以后再玩魔兽的时候绝对绝对虐死他) 做完后总结了一下思路; 首先推一下以下三条性质: 1.若两个 i 与 i+1 不相邻,那么我们直接交换这两个数字就可以组成一个新的数列 ...

  5. 02: kubernetes安装

    参考官网:http://docs.kubernetes.org.cn/ 1.1 集群部署 1.集群结构 192.168.56.11 linux-node1 linux-node1.example.co ...

  6. python3的一些文件操作的脚手架

    用python把原来的脚本重构了一下,其中写了文件操作的一些函数,如下: import os import shutil import hashlib import stat #查找文件夹中的某个文件 ...

  7. 7.利用canvas和js画一个渐变的

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. iOS蓝牙4.0开发

    文/starfox寒流(简书作者)原文链接:http://www.jianshu.com/p/974d165f78b5著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. iOS 蓝牙4.0 ...

  9. 如何计算java程序运行花了多长时间。加时间戳。

    long start = System.currentTimeMillis(); // 记录起始时间 try { Thread.sleep(5000); // 线程睡眠5秒,让运行时间不那么小 } c ...

  10. java.lang.Integer 类(JDK1.7)

    1.Integer 和int 的区别 ①.Integer 是 int 包装类,int 是八大基本数据类型之一(byte,char,short,int,long,float,double,boolean ...