问题
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>());
Where out
is an Eigen::Vector4d
and outVector
is a std::vector<Eigen::Vector4d>
.
The full error output is:
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.
回答1:
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()
).
来源:https://stackoverflow.com/questions/16553906/block-operations-wont-work-on-eigen