error C2338: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAS

使用Eigen库时遇到了error C2338: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY的错误

VS2019报错提示如下:

F:\VSA_backup_set\libigl-example-project-main\out\build\x64-Release\_deps\eigen-src\Eigen\src\Core\AssignEvaluator.h(834): error C2338: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
  F:\VSA_backup_set\libigl-example-project-main\out\build\x64-Release\_deps\eigen-src\Eigen\src/Core/PlainObjectBase.h(732): note: 查看对正在编译的函数 模板 实例化“void Eigen::internal::call_assignment_no_alias<Derived,Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>,Eigen::internal::assign_op<double,int>>(Dst &,const Src &,const Func &)”的引用
          with
          [
              Derived=Eigen::Matrix<double,3,1,0,3,1>,
              Dst=Eigen::Matrix<double,3,1,0,3,1>,
              Src=Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>,
              Func=Eigen::internal::assign_op<double,int>
          ]
  F:\VSA_backup_set\libigl-example-project-main\out\build\x64-Release\_deps\eigen-src\Eigen\src/Core/PlainObjectBase.h(537): note: 查看对正在编译的函数 模板 实例化“Derived &Eigen::PlainObjectBase<Derived>::_set_noalias<Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>>(const Eigen::DenseBase<Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>> &)”的引用
          with
          [
              Derived=Eigen::Matrix<double,3,1,0,3,1>
          ]
  F:\VSA_backup_set\libigl-example-project-main\out\build\x64-Release\_deps\eigen-src\Eigen\src/Core/PlainObjectBase.h(537): note: 查看对正在编译的函数 模板 实例化“Derived &Eigen::PlainObjectBase<Derived>::_set_noalias<Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>>(const Eigen::DenseBase<Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>> &)”的引用
          with
          [
              Derived=Eigen::Matrix<double,3,1,0,3,1>
          ]
  F:\VSA_backup_set\libigl-example-project-main\out\build\x64-Release\_deps\eigen-src\Eigen\src/Core/Matrix.h(378): note: 查看对正在编译的函数 模板 实例化“Eigen::PlainObjectBase<Eigen::Matrix<double,3,1,0,3,1>>::PlainObjectBase<Derived>(const Eigen::DenseBase<Derived> &)”的引用
          with
          [
              Derived=Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>
          ]
  F:\VSA_backup_set\libigl-example-project-main\out\build\x64-Release\_deps\eigen-src\Eigen\src/Core/Matrix.h(377): note: 查看对正在编译的函数 模板 实例化“Eigen::PlainObjectBase<Eigen::Matrix<double,3,1,0,3,1>>::PlainObjectBase<Derived>(const Eigen::DenseBase<Derived> &)”的引用
          with
          [
              Derived=Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>
          ]
  ..\..\..\partitioning.cpp(1506): note: 查看对正在编译的函数 模板 实例化“Eigen::Matrix<double,3,1,0,3,1>::Matrix<Derived>(const Eigen::EigenBase<Derived> &)”的引用
          with
          [
              Derived=Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>
          ]
  ..\..\..\partitioning.cpp(1506): note: 查看对正在编译的函数 模板 实例化“Eigen::Matrix<double,3,1,0,3,1>::Matrix<Derived>(const Eigen::EigenBase<Derived> &)”的引用
          with
          [
              Derived=Eigen::Block<Eigen::Matrix<int,-1,-1,0,-1,-1>,1,-1,false>
          ]
  ninja: build stopped: subcommand failed.

从上面的提示可以看出,报错提示中不断出现Block<Eigen::Matrix<int,Eigen::Matrix<double,可以猜测可能是eigen矩阵中的double类型的矩阵(MatrixXd、VectorXd)和int类型的矩阵(MatrixXi、VectorXi)发生了相互赋值的情况

通过检查发现出错的代码如下:

Vector3d neig_tri = F.row(neig_t);

其中F是MatrixXi的类型,但却赋给了Vector3d类型的变量,导致出错,解决办法是将Vector3d改为Vector3i,问题解决

Vector3i neig_tri = F.row(neig_t);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值