Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当转换特征矩阵类型时,错误:在‘;之前预期的主表达式;浮动’;_C++_Templates_Casting_Eigen - Fatal编程技术网

C++ 当转换特征矩阵类型时,错误:在‘;之前预期的主表达式;浮动’;

C++ 当转换特征矩阵类型时,错误:在‘;之前预期的主表达式;浮动’;,c++,templates,casting,eigen,C++,Templates,Casting,Eigen,错误消息表示编译器不知道pose.cast是一个模板。对于类成员.foo可以是什么,有三个基本选项: 值(例如数据成员或enum值) 类型名称(例如,使用typedef定义的内容) 上面其中一个的模板 在您的例子中,pose属于Eigen::Matrix类型。编译器还不知道Eigen::Matrix是什么样子,因为它取决于t是什么(可能有人对不同类型的Eigen::Matrix进行了专门化) 因此,当您访问未知类的成员时(如使用pose.cast),编译器会假定它的选项为#1(一个值)。这导致它

错误消息表示编译器不知道
pose.cast
是一个模板。对于类成员
.foo
可以是什么,有三个基本选项:

  • 值(例如数据成员或
    enum
    值)
  • 类型名称(例如,使用
    typedef
    定义的内容)
  • 上面其中一个的模板
  • 在您的例子中,
    pose
    属于
    Eigen::Matrix
    类型。编译器还不知道
    Eigen::Matrix
    是什么样子,因为它取决于
    t
    是什么(可能有人对不同类型的
    Eigen::Matrix
    进行了专门化)


    因此,当您访问未知类的成员时(如使用
    pose.cast
    ),编译器会假定它的选项为#1(一个值)。这导致它解析
    pose.cast@melpomene谢谢,出现了一个新错误,我将其更新为我的问题。您只发布了一半的错误消息。我后来发现Im使用的库之间存在冲突。
    
    template <typename T>
          bool operator()(const T* parameters, T* residuals) const
        {
            Eigen::Matrix<T, 3, 1> pose(parameters[0],parameters[1],parameters[2]);
            Eigen::Vector3f pose1 = pose.cast<float>();
            Eigen::Affine2f transform = occ->getTransformForState(pose1);  // transform: rotation->translation
    
    
            Eigen::Vector3f tmp1 = occ->interpMapValueWithDerivatives(  transform * currPoint);
    
            Eigen::Matrix<T, 3, 1> transformedPointData(tmp1.cast<T>());  /// {M,dM/dx,dM/dy}
    
            T funVal = T(1) - transformedPointData[0];
    
            residuals[0] = funVal;
    
            return true;
        }
    
             Eigen::Vector3f pose1 = pose.cast<float>();
    
    /usr/include/eigen3/Eigen/src/Core/MathFunctions.h: In instantiation of ‘static NewType Eigen::internal::cast_impl<OldType, NewType>::run(const OldType&) [with OldType = ceres::Jet<double, 3>; NewType = float]’:
    /usr/include/eigen3/Eigen/src/Core/MathFunctions.h:328:44:   required from ‘NewType Eigen::internal::cast(const OldType&) [with OldType = ceres::Jet<double, 3>; NewType = float]’
    /usr/include/eigen3/Eigen/src/Core/Functors.h:351:104:   required from ‘const NewType Eigen::internal::scalar_cast_op<Scalar, NewType>::operator()(const Scalar&) const [with Scalar = ceres::Jet<double, 3>; NewType = float]’
    /usr/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h:114:75:   required from ‘const Scalar Eigen::CwiseUnaryOpImpl<UnaryOp, XprType, Eigen::Dense>::coeff(Eigen::CwiseUnaryOpImpl<UnaryOp, XprType, Eigen::Dense>::Index) const [with UnaryOp = Eigen::internal::scalar_cast_op<ceres::Jet<double, 3>, float>; XprType = const Eigen::Matrix<ceres::Jet<double, 3>, 3, 1, 0, 3, 1>; Eigen::CwiseUnaryOpImpl<UnaryOp, XprType, Eigen::Dense>::Scalar = float; Eigen::CwiseUnaryOpImpl<UnaryOp, XprType, Eigen::Dense>::Index = long int]’
    /usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:495:33:   required from ‘void Eigen::DenseCoeffsBase<Derived, 1>::copyCoeff(Eigen::DenseCoeffsBase<Derived, 1>::Index, const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<ceres::Jet<double, 3>, float>, const Eigen::Matrix<ceres::Jet<double, 3>, 3, 1, 0, 3, 1> >; Derived = Eigen::Matrix<float, 3, 1>; Eigen::DenseCoeffsBase<Derived, 1>::Index = long int]’
    /usr/include/eigen3/Eigen/src/Core/Assign.h:180:5:   required from ‘static void Eigen::internal::assign_LinearTraversal_CompleteUnrolling<Derived1, Derived2, Index, Stop>::run(Derived1&, const Derived2&) [with Derived1 = Eigen::Matrix<float, 3, 1>; Derived2 = Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<ceres::Jet<double, 3>, float>, const Eigen::Matrix<ceres::Jet<double, 3>, 3, 1, 0, 3, 1> >; int Index = 0; int Stop = 3]’
    /usr/include/eigen3/Eigen/src/Core/Assign.h:314:21:   [ skipping 5 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
    /usr/include/eigen3/Eigen/src/Core/Matrix.h:281:31:   required from ‘Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::Matrix(const Eigen::MatrixBase<OtherDerived>&) [with OtherDerived = Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<ceres::Jet<double, 3>, float>, const Eigen::Matrix<ceres::Jet<double, 3>, 3, 1, 0, 3, 1> >; _Scalar = float; int _Rows = 3; int _Cols = 1; int _Options = 0; int _MaxRows = 3; int _MaxCols = 1]’
    
    Eigen::Vector3f pose1 = pose.template cast<float>();