块操作不适用于Eigen

时间:2013-05-14 22:30:19

标签: c++ eigen

Eigen上的块操作不起作用。我遇到了一堆错误:

error: ‘Eigen::Vector4d’ has no member named ‘head’

产生此错误的代码行是:

outVector.push_back(out.head<3>());

其中outEigen::Vector4doutVectorstd::vector<Eigen::Vector4d>

完整的错误输出是:

PortalSpace2.cpp: In member function ‘virtual std::vector<Eigen::Matrix<double, 3, 1> > PortalSpace::PointOfReference::vectorsFromPoint(std::tr1::shared_ptr<Manifold::Point>)’:
PortalSpace2.cpp:73:26: error: ‘Eigen::Vector4d’ has no member named ‘head’
PortalSpace2.cpp:73:34: error: expected primary-expression before ‘)’ token
PortalSpace2.cpp: In member function ‘virtual std::tr1::shared_ptr<Manifold::Point> PortalSpace::PointOfReference::pointFromVector(Eigen::Vector3d)’:
PortalSpace2.cpp:84:24: error: ‘Eigen::Vector4d’ has no member named ‘tail’
PortalSpace2.cpp:85:24: error: ‘Eigen::Vector4d’ has no member named ‘tail’
PortalSpace2.cpp:96:28: error: ‘class PortalSpace::Point’ has no member named ‘tail’
PortalSpace2.cpp:96:49: error: ‘Eigen::Vector4d’ has no member named ‘tail’
PortalSpace2.cpp:97:13: error: expected initializer before ‘<<’ token
PortalSpace2.cpp:98:32: error: ‘y’ was not declared in this scope
PortalSpace2.cpp: In member function ‘virtual void PortalSpace::PointOfReference::move(Eigen::Vector3d)’:
PortalSpace2.cpp:116:13: error: ‘vector’ was not declared in this scope
PortalSpace2.cpp:116:13: note: suggested alternative:
In file included from /usr/include/c++/4.7/vector:65:0,
                 from PortalSpace2.h:4,
                 from PortalSpace2.cpp:5:
/usr/include/c++/4.7/bits/stl_vector.h:208:11: note:   ‘std::vector’
PortalSpace2.cpp:119:28: error: no match for ‘operator[]’ in ‘((PortalSpace::PointOfReference*)this)->PortalSpace::PointOfReference::position[0]’
PortalSpace2.cpp:120:28: error: no match for ‘operator[]’ in ‘((PortalSpace::PointOfReference*)this)->PortalSpace::PointOfReference::position[0]’
PortalSpace2.cpp:121:24: error: ‘Eigen::Vector4d’ has no member named ‘tail’
PortalSpace2.cpp:122:24: error: ‘Eigen::Vector4d’ has no member named ‘tail’
PortalSpace2.cpp:133:28: error: ‘class PortalSpace::Point’ has no member named ‘tail’
PortalSpace2.cpp:133:49: error: ‘Eigen::Vector4d’ has no member named ‘tail’
PortalSpace2.cpp:134:13: error: expected initializer before ‘<<’ token
PortalSpace2.cpp:135:2: error: ‘coordinates’ was not declared in this scope
PortalSpace2.cpp:135:19: error: ‘y’ was not declared in this scope
PortalSpace2.cpp:140:12: error: ‘Eigen::Matrix4d’ has no member named ‘column’
PortalSpace2.cpp:141:12: error: ‘Eigen::Matrix4d’ has no member named ‘column’
PortalSpace2.cpp:141:26: error: ‘Eigen::Vector4d’ has no member named ‘tail’
PortalSpace2.cpp:142:12: error: ‘Eigen::Matrix4d’ has no member named ‘column’
PortalSpace2.cpp:142:43: error: no match for ‘operator[]’ in ‘((PortalSpace::PointOfReference*)this)->PortalSpace::PointOfReference::position[1]’
PortalSpace2.cpp:142:55: error: no match for ‘operator[]’ in ‘((PortalSpace::PointOfReference*)this)->PortalSpace::PointOfReference::position[2]’
PortalSpace2.cpp:142:67: error: no match for ‘operator[]’ in ‘((PortalSpace::PointOfReference*)this)->PortalSpace::PointOfReference::position[3]’
PortalSpace2.cpp:143:12: error: ‘Eigen::Matrix4d’ has no member named ‘column’
PortalSpace2.cpp:143:34: error: ‘Eigen::Matrix4d’ has no member named ‘column’
PortalSpace2.cpp:143:60: error: ‘Eigen::Matrix4d’ has no member named ‘column’
PortalSpace2.cpp:149:23: error: expected primary-expression before ‘.’ token
PortalSpace2.cpp:150:31: error: expected primary-expression before ‘<<’ token
PortalSpace2.cpp:156:14: error: expected primary-expression before ‘.’ token
PortalSpace2.cpp:157:31: error: expected primary-expression before ‘<<’ token
PortalSpace2.cpp:162:14: error: expected primary-expression before ‘.’ token
PortalSpace2.cpp:163:31: error: expected primary-expression before ‘<<’ token
In file included from /usr/include/eigen2/Eigen/Core:137:0,
                 from /usr/include/eigen2/Eigen/Dense:1,
                 from Manifold.h:7,
                 from PortalSpace2.h:7,
                 from PortalSpace2.cpp:5:
/usr/include/eigen2/Eigen/src/Core/Product.h: In instantiation of ‘const typename Eigen::ProductReturnType<Derived, OtherDerived>::Type Eigen::MatrixBase<Derived>::operator*(const Eigen::MatrixBase<OtherDerived>&) const [with OtherDerived = Eigen::Matrix<double, 4, 4>; Derived = Eigen::Matrix<double, 3, 3>; typename Eigen::ProductReturnType<Derived, OtherDerived>::Type = Eigen::Product<const Eigen::Matrix<double, 3, 3>&, const Eigen::Matrix<double, 4, 4>&, 0>]’:
PortalSpace2.cpp:170:20:   required from here
/usr/include/eigen2/Eigen/src/Core/Product.h:297:3: error: ‘INVALID_MATRIX_PRODUCT’ is not a member of ‘Eigen::ei_static_assert<false>’
In file included from /usr/include/eigen2/Eigen/Core:125:0,
                 from /usr/include/eigen2/Eigen/Dense:1,
                 from Manifold.h:7,
                 from PortalSpace2.h:7,
                 from PortalSpace2.cpp:5:
/usr/include/eigen2/Eigen/src/Core/Assign.h: In instantiation of ‘Derived& Eigen::MatrixBase<Derived>::lazyAssign(const Eigen::MatrixBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, 3, 4, 2, 3, 4>; Derived = Eigen::Matrix<double, 4, 4>]’:
/usr/include/eigen2/Eigen/src/Core/Assign.h:447:123:   required from ‘static Derived& Eigen::ei_assign_selector<Derived, OtherDerived, false, false>::run(Derived&, const OtherDerived&) [with Derived = Eigen::Matrix<double, 4, 4>; OtherDerived = Eigen::Matrix<double, 3, 4, 2, 3, 4>]’
/usr/include/eigen2/Eigen/src/Core/Matrix.h:554:87:   required from ‘Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>& Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::_set_noalias(const Eigen::MatrixBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, 3, 4, 2, 3, 4>; _Scalar = double; int _Rows = 4; int _Cols = 4; int _Options = 2; int _MaxRows = 4; int _MaxCols = 4; Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> = Eigen::Matrix<double, 4, 4>]’
/usr/include/eigen2/Eigen/src/Core/Matrix.h:538:94:   required from ‘void Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::_set_selector(const OtherDerived&, const Eigen::ei_meta_true&) [with OtherDerived = Eigen::Product<const Eigen::Matrix<double, 3, 3>&, const Eigen::Matrix<double, 4, 4>&, 0>; _Scalar = double; int _Rows = 4; int _Cols = 4; int _Options = 2; int _MaxRows = 4; int _MaxCols = 4]’
/usr/include/eigen2/Eigen/src/Core/Matrix.h:533:7:   required from ‘Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>& Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::_set(const Eigen::MatrixBase<OtherDerived>&) [with OtherDerived = Eigen::Product<const Eigen::Matrix<double, 3, 3>&, const Eigen::Matrix<double, 4, 4>&, 0>; _Scalar = double; int _Rows = 4; int _Cols = 4; int _Options = 2; int _MaxRows = 4; int _MaxCols = 4; Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> = Eigen::Matrix<double, 4, 4>]’
/usr/include/eigen2/Eigen/src/Core/Matrix.h:283:24:   required from ‘Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>& Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::operator=(const Eigen::MatrixBase<OtherDerived>&) [with OtherDerived = Eigen::Product<const Eigen::Matrix<double, 3, 3>&, const Eigen::Matrix<double, 4, 4>&, 0>; _Scalar = double; int _Rows = 4; int _Cols = 4; int _Options = 2; int _MaxRows = 4; int _MaxCols = 4; Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> = Eigen::Matrix<double, 4, 4>]’
PortalSpace2.cpp:170:20:   required from here
/usr/include/eigen2/Eigen/src/Core/Assign.h:428:3: error: ‘YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES’ is not a member of ‘Eigen::ei_static_assert<false>’
make: *** [all] Error 1

那里可能还有几个不相关的编译器错误,但是当我到达那里时我会处理那些错误。

1 个答案:

答案 0 :(得分:2)

似乎你正在使用 eigen2 ,而你的代码期望 eigen3 ,因为函数head()在eigen2中不存在(它被称为{{1} })。