Tag Archives: Eigen

Error reporting on data type and matrix dimension of eigen

1. Data type error

/home/wy/workdir/slambook/ch3/useEigen/build> make -j2
Scanning dependencies of target eigenMatrix
[ 50%] Building CXX object CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o
In file included from /usr/include/eigen3/Eigen/Core:348:0,
                 from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:5:
/usr/include/eigen3/Eigen/src/Core/Product.h: In instantiation of ‘struct Eigen::internal::product_result_scalar<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, Eigen::DenseShape, Eigen::DenseShape>’:
/usr/include/eigen3/Eigen/src/Core/Product.h:78:73:   required from ‘struct Eigen::internal::traits<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >’
/usr/include/eigen3/Eigen/src/Core/Product.h:151:7:   required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>’
/usr/include/eigen3/Eigen/src/Core/Product.h:183:7:   required from ‘class Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h:107:7:   required from ‘class Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:52:65:   required from here
/usr/include/eigen3/Eigen/src/Core/Product.h:41:98: 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:344:0,
                 from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:5:
/usr/include/eigen3/Eigen/src/Core/DenseBase.h: In instantiation of ‘class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >’:
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:48:34:   required from ‘class Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >’
/usr/include/eigen3/Eigen/src/Core/Product.h:151:7:   required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>’
/usr/include/eigen3/Eigen/src/Core/Product.h:183:7:   required from ‘class Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h:107:7:   required from ‘class Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:52:65:   required from here
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:78:25: error: using-declaration for non-member at class scope
     using Base::operator*;
                         ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:79:25: error: using-declaration for non-member at class scope
     using Base::operator/;
                         ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:80:17: error: using-declaration for non-member at class scope
     using Base::derived;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:81:17: error: using-declaration for non-member at class scope
     using Base::const_cast_derived;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:82:17: error: using-declaration for non-member at class scope
     using Base::rows;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:83:17: error: using-declaration for non-member at class scope
     using Base::cols;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:84:17: error: using-declaration for non-member at class scope
     using Base::size;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:85:17: error: using-declaration for non-member at class scope
     using Base::rowIndexByOuterInner;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:86:17: error: using-declaration for non-member at class scope
     using Base::colIndexByOuterInner;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:87:17: error: using-declaration for non-member at class scope
     using Base::coeff;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:88:17: error: using-declaration for non-member at class scope
     using Base::coeffByOuterInner;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:89:26: error: using-declaration for non-member at class scope
     using Base::operator();
                          ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:90:26: error: using-declaration for non-member at class scope
     using Base::operator[];
                          ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:91:17: error: using-declaration for non-member at class scope
     using Base::x;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:92:17: error: using-declaration for non-member at class scope
     using Base::y;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:93:17: error: using-declaration for non-member at class scope
     using Base::z;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:94:17: error: using-declaration for non-member at class scope
     using Base::w;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:95:17: error: using-declaration for non-member at class scope
     using Base::stride;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:96:17: error: using-declaration for non-member at class scope
     using Base::innerStride;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:97:17: error: using-declaration for non-member at class scope
     using Base::outerStride;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:98:17: error: using-declaration for non-member at class scope
     using Base::rowStride;
                 ^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:99:17: error: using-declaration for non-member at class scope
     using Base::colStride;
                 ^
In file included from /usr/include/eigen3/Eigen/Core:345:0,
                 from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:5:
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h: In instantiation of ‘class Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >’:
/usr/include/eigen3/Eigen/src/Core/Product.h:151:7:   required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>’
/usr/include/eigen3/Eigen/src/Core/Product.h:183:7:   required from ‘class Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h:107:7:   required from ‘class Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:52:65:   required from here
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:70:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::derived’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::derived;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:71:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::const_cast_derived’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::const_cast_derived;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:72:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::rows’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::rows;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:73:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::cols’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::cols;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:74:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::size’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::size;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:75:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::coeff’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::coeff;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:76:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::coeffRef’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::coeffRef;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:78:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::eval’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::eval;
                 ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:81:25: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::operator*=’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::operator*=;
                         ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:82:25: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::operator/=’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::operator/=;
                         ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:83:25: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::operator*’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::operator*;
                         ^
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:84:25: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}::operator/’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0> >}’
     using Base::operator/;
                         ^
In file included from /usr/include/eigen3/Eigen/Core:62:0,
                 from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:5:
/usr/include/eigen3/Eigen/src/Core/Product.h: In instantiation of ‘class Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>’:
/usr/include/eigen3/Eigen/src/Core/Product.h:107:7:   required from ‘class Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:52:65:   required from here
/usr/include/eigen3/Eigen/src/Core/util/Macros.h:790:15: error: no members matching ‘Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}::derived’ in ‘Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}’
   using Base::derived; \
               ^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h:796:3: note: in expansion of macro ‘EIGEN_GENERIC_PUBLIC_INTERFACE’
   EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \
   ^
/usr/include/eigen3/Eigen/src/Core/Product.h:191:5: note: in expansion of macro ‘EIGEN_DENSE_PUBLIC_INTERFACE’
     EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
     ^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h:791:15: error: no members matching ‘Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}::const_cast_derived’ in ‘Eigen::ProductImpl<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, Eigen::Dense>::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}’
   using Base::const_cast_derived;
               ^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h:796:3: note: in expansion of macro ‘EIGEN_GENERIC_PUBLIC_INTERFACE’
   EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \
   ^
/usr/include/eigen3/Eigen/src/Core/Product.h:191:5: 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, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>’:
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:52:65:   required from here
/usr/include/eigen3/Eigen/src/Core/util/Macros.h:790:15: error: no members matching ‘Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}::derived’ in ‘Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}’
   using Base::derived; \
               ^
/usr/include/eigen3/Eigen/src/Core/Product.h:122:5: note: in expansion of macro ‘EIGEN_GENERIC_PUBLIC_INTERFACE’
     EIGEN_GENERIC_PUBLIC_INTERFACE(Product)
     ^
/usr/include/eigen3/Eigen/src/Core/util/Macros.h:791:15: error: no members matching ‘Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>::Base {aka Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}::const_cast_derived’ in ‘Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>::Base {aka class Eigen::internal::dense_product_base<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0, 3>}’
   using Base::const_cast_derived;
               ^
/usr/include/eigen3/Eigen/src/Core/Product.h:122:5: 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:52:63: error: conversion from ‘const Eigen::Product<Eigen::Matrix<float, 2, 3>, Eigen::Matrix<double, 3, 1>, 0>’ to non-scalar type ‘Eigen::Matrix<double, 2, 1>’ requested
     Eigen::Matrix<double, 2, 1> result_wrong_type = matrix_23 * v_3d;
                                                               ^
CMakeFiles/eigenMatrix.dir/build.make:62: recipe for target 'CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o' failed
make[2]: *** [CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/eigenMatrix.dir/all' failed
make[1]: *** [CMakeFiles/eigenMatrix.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
*** Failure: Exit code 2 ***

 

problem analysis :

Two different types of matrices cannot be mixed in eigen. Eigen does not perform automatic type conversion and needs to perform explicit conversion manually

Compiling the following code will get the above error

Eigen::Matrix<float, 2, 3> matrix_23;
Eigen::Vector3d v_3d;

matrix_23 << 1, 2, 3, 4, 5, 6;
v_3d << 1, 2, 3;

Eigen::Matrix<double, 2, 1> result_= matrix_23 * v_3d;

The correction code is as follows:

Eigen::Matrix<float, 2, 3> matrix_23;
Eigen::Vector3d v_3d;

matrix_23 << 1, 2, 3, 4, 5, 6;
v_3d << 1, 2, 3;

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

2. Matrix dimension error reporting

/home/wy/workdir/slambook/ch3/useEigen/build> make -j2
Scanning dependencies of target eigenMatrix
[ 50%] Building CXX object CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o
In file included from /usr/include/eigen3/Eigen/Core:297:0,
                 from /home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:5:
/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, 2, 3, 0, 2, 3>; Src = Eigen::Product<Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<float, double>, const Eigen::Matrix<float, 2, 3> >, Eigen::Matrix<double, 3, 1>, 0>; Func = Eigen::internal::assign_op<double>]’:
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:700:41:   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, 2, 3> >, Eigen::Matrix<double, 3, 1>, 0>; Derived = Eigen::Matrix<double, 2, 3, 0, 2, 3>]’
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:510:19:   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, 2, 3> >, Eigen::Matrix<double, 3, 1>, 0>; Derived = Eigen::Matrix<double, 2, 3, 0, 2, 3>]’
/usr/include/eigen3/Eigen/src/Core/Matrix.h:379:29:   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, 2, 3> >, Eigen::Matrix<double, 3, 1>, 0>; _Scalar = double; int _Rows = 2; int _Cols = 3; int _Options = 0; int _MaxRows = 2; int _MaxCols = 3]’
/home/wy/workdir/slambook/ch3/useEigen/eigenMatrix.cpp:62:86:   required from here
/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h:119:9: 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:184:3: note: in expansion of macro ‘EIGEN_STATIC_ASSERT’
   EIGEN_STATIC_ASSERT( \
   ^
/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:744:3: note: in expansion of macro ‘EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE’
   EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned,Src)
   ^
CMakeFiles/eigenMatrix.dir/build.make:62: recipe for target 'CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o' failed
make[2]: *** [CMakeFiles/eigenMatrix.dir/eigenMatrix.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/eigenMatrix.dir/all' failed
make[1]: *** [CMakeFiles/eigenMatrix.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
*** Failure: Exit code 2 ***

 

problem analysis :

When the rows and columns of matrix operation do not match, the above error will appear. The code is as follows

Eigen::Matrix<float, 2, 3> matrix_23;
Eigen::Vector3d v_3d;

matrix_23 << 1, 2, 3, 4, 5, 6;
v_3d << 1, 2, 3;

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

Solution:

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