Eigen 编译错误:if 语句中的 Eigen 矩阵大小不匹配
Compilation error with Eigen: Eigen matrix size mismatch in if statement
我正在处理 Eigen 和静态矩阵大小。我有一个大小为 (NC-1)*USIZE x (NC-1)*USIZE 的矩阵。如果 NC 为 1,则会出现编译错误。代码中有问题的部分如下:
if (NC > 1) {
Eigen::Matrix<float,(NC-1)*USIZE,(NC-1)*USIZE> thelp;
for (unsigned int m=0;m<(NC-1);m++) {
for(unsigned int n=0;n<=m;n++) {
thelp.block<USIZE,USIZE>(m*USIZE,n*USIZE) = Eigen::Matrix<float,USIZE,USIZE>::Identity();
}
}
我得到的错误是在我对lp进行块操作的那一行,错误信息如下:
Eigen/src/Core/util/StaticAssert.h:115:9: error: ‘YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES’ is not a member of ‘Eigen::internal::static_assertion<false>’
if (Eigen::internal::static_assertion<bool(CONDITION)>::MSG) {}
如果在 NC = 1 时执行语句,那么出现此错误显然是有意义的,因为那时 thelp 的大小将为 0x0。有没有一种方法可以制定允许 NC = 1 的代码片段,以便我可以继续使用静态大小的矩阵?或者我能以某种方式让编译器知道这条语句不会因为 if 表达式而被执行吗?
感谢您的帮助!
看来我问的有点太快了。我发现有一个 Eigen 函数 setIdentity() 可以让我做我想做的事。我只需要修改导致我出现问题的行上的原始代码片段:
之前:
thelp.block<USIZE,USIZE>(m*USIZE,n*USIZE) = Eigen::Matrix<float,USIZE,USIZE>::Identity();
之后:
thelp.block<USIZE,USIZE>(m*USIZE,n*USIZE).setIdentity();
通过这种方式,我解决了在 NC 等于 1 时尝试将 USIZE x USIZE 单位矩阵分配给 0x0 矩阵的错误。
我正在处理 Eigen 和静态矩阵大小。我有一个大小为 (NC-1)*USIZE x (NC-1)*USIZE 的矩阵。如果 NC 为 1,则会出现编译错误。代码中有问题的部分如下:
if (NC > 1) {
Eigen::Matrix<float,(NC-1)*USIZE,(NC-1)*USIZE> thelp;
for (unsigned int m=0;m<(NC-1);m++) {
for(unsigned int n=0;n<=m;n++) {
thelp.block<USIZE,USIZE>(m*USIZE,n*USIZE) = Eigen::Matrix<float,USIZE,USIZE>::Identity();
}
}
我得到的错误是在我对lp进行块操作的那一行,错误信息如下:
Eigen/src/Core/util/StaticAssert.h:115:9: error: ‘YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES’ is not a member of ‘Eigen::internal::static_assertion<false>’
if (Eigen::internal::static_assertion<bool(CONDITION)>::MSG) {}
如果在 NC = 1 时执行语句,那么出现此错误显然是有意义的,因为那时 thelp 的大小将为 0x0。有没有一种方法可以制定允许 NC = 1 的代码片段,以便我可以继续使用静态大小的矩阵?或者我能以某种方式让编译器知道这条语句不会因为 if 表达式而被执行吗?
感谢您的帮助!
看来我问的有点太快了。我发现有一个 Eigen 函数 setIdentity() 可以让我做我想做的事。我只需要修改导致我出现问题的行上的原始代码片段:
之前:
thelp.block<USIZE,USIZE>(m*USIZE,n*USIZE) = Eigen::Matrix<float,USIZE,USIZE>::Identity();
之后:
thelp.block<USIZE,USIZE>(m*USIZE,n*USIZE).setIdentity();
通过这种方式,我解决了在 NC 等于 1 时尝试将 USIZE x USIZE 单位矩阵分配给 0x0 矩阵的错误。