使用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);