块运算在Eigen上不起作用 [英] Block operations won't work on Eigen

查看:57
本文介绍了块运算在Eigen上不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Eigen上执行块操作将不起作用.我遇到一堆错误,例如:

The block operations on Eigen won't work. I'm getting a bunch of errors like:

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

生成此错误的代码行是:

The line of code generating this error is:

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

其中 out Eigen :: Vector4d ,而 outVector std :: 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

那里可能还存在几个不相关的编译器错误,但是到那里时,我会继续处理这些错误.

There's also probably several unrelated compiler errors in there, but I'll work on those when I get there.

推荐答案

似乎您正在使用 eigen2 ,而您的代码期望 eigen3 ,因为函数 head()在eigen2中不存在(它称为 start()).

It seems you are using eigen2 while your code is expecting eigen3 since the function head() does not exist in eigen2 (it was called start()).

这篇关于块运算在Eigen上不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆