编译是出现error: ‘ScalarBinaryOpTraits’ is not a class template错误
在编译一个开源代码的时候出现了一下错误:
In file included from /usr/local/include/ceres/internal/autodiff.h:153:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/qx/Project/SLAM/lio/fastlio_slam/src/FAST_LIO_SLAM/SC-PGO/src/laserMapping.cpp:54:
/usr/local/include/ceres/jet.h:1023:8: error: ‘ScalarBinaryOpTraits’ is not a class template
struct ScalarBinaryOpTraits<ceres::Jet<T, N>, T, BinaryOp> {
^~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/jet.h:1027:58: error: type/value mismatch at argument 3 in template parameter list for ‘template<class BinaryOp, class T, int N> struct Eigen::ScalarBinaryOpTraits’
struct ScalarBinaryOpTraits<T, ceres::Jet<T, N>, BinaryOp> {
^
/usr/local/include/ceres/jet.h:1027:58: note: expected a constant of type ‘int’, got ‘BinaryOp’
In file included from /usr/local/include/ceres/internal/autodiff.h:153:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/qx/Project/SLAM/lio/fastlio_slam/src/FAST_LIO_SLAM/SC-PGO/src/lidarFactor.hpp:4,
from /home/qx/Project/SLAM/lio/fastlio_slam/src/FAST_LIO_SLAM/SC-PGO/src/laserOdometry.cpp:57:
/usr/local/include/ceres/jet.h:1023:8: error: ‘ScalarBinaryOpTraits’ is not a class template
struct ScalarBinaryOpTraits<ceres::Jet<T, N>, T, BinaryOp> {
^~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/jet.h:1027:58: error: type/value mismatch at argument 3 in template parameter list for ‘template<class BinaryOp, class T, int N> struct Eigen::ScalarBinaryOpTraits’
struct ScalarBinaryOpTraits<T, ceres::Jet<T, N>, BinaryOp> {
^
/usr/local/include/ceres/jet.h:1027:58: note: expected a constant of type ‘int’, got ‘BinaryOp’
In file included from /usr/local/include/ceres/internal/autodiff.h:153:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/qx/Project/SLAM/lio/fastlio_slam/src/FAST_LIO_SLAM/SC-PGO/src/laserPosegraphOptimization.cpp:39:
/usr/local/include/ceres/jet.h:1023:8: error: ‘ScalarBinaryOpTraits’ is not a class template
struct ScalarBinaryOpTraits<ceres::Jet<T, N>, T, BinaryOp> {
^~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/jet.h:1027:58: error: type/value mismatch at argument 3 in template parameter list for ‘template<class BinaryOp, class T, int N> struct Eigen::ScalarBinaryOpTraits’
struct ScalarBinaryOpTraits<T, ceres::Jet<T, N>, BinaryOp> {
^
出现该错误的原因是使用Ceres库,其安装编译Ceres时的Eigen版本和当前系统中的Eigen版本不一致产生。
解决方法是:从新安装Ceres,本人安装1.14版本没问题了