zoukankan      html  css  js  c++  java
  • 关于Eigen的数据类型和矩阵维度报错

    1. 数据类型报错

    /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 functionint 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 ***

    问题分析

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

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

    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;

    更正代码如下,

    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. 矩阵维度报错

    /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 ***

    问题分析

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

    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;

    解决方案

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

     

    Eigen使用内存对齐实现加速运算的原理

    https://zhuanlan.zhihu.com/p/93824687

  • 相关阅读:
    wordpress 常用 数据库脚本
    Centos6.3安装locate
    WordPress路径相关函数总结
    关于电子杂志翻页的资源
    CentOS下MongoDB的升级
    WordPress数据库研究
    HOWTO:如何通过ServiceAddService修改已经存在的服务启动参数
    FAQ:Component的属性是否可以运行时修改?
    INFO:AdminStudio Debug
    HOWTO:如何修改InstallShield的运行环境
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/10946694.html
Copyright © 2011-2022 走看看