c++ - block 操作不适用于 Eigen

标签 c++ eigen

Eigen 上的 block 操作将不起作用。我收到一堆错误,例如:

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

产生这个错误的代码行是:

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

在哪里out是一个 Eigen::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

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

最佳答案

看起来你正在使用 eigen2 而你的代码期待 eigen3 因为函数 head() 在 eigen2 中不存在(它是称为 start())。

关于c++ - block 操作不适用于 Eigen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553906/

相关文章:

python - C++ 中基本 Boost 使用的段错误

c++ - 跟踪注入(inject)过程中的 HDC

c++ - 使用 c++ eigen 库的未知错误

c++ - 查找 Eigen 上失败的静态断言的来源

c++ - CodeBlocks Qt HelloWorld.exe 已停止工作 (C++)

c++ - Xcode 错误编译 C++ 预期成员名称或声明说明符后的 ';'

c++ - Eigen,如何访问 MatrixBase<Derived> 的底层数组

c++ - Eigen Library - EigenSolver 中的复数值

c++ - 如何从另一个平台(iOS 到 Windows)打开和读取 SQLite 数据库

c++ - 如何自定义setRandom的范围?