我正在处理特征值和静态矩阵大小。我有一个尺寸为(NC-1)* USIZE x(NC-1)* USIZE的矩阵lp。如果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();
}
}
我得到的错误是在thelp上执行块操作的那一行,并且错误消息如下:
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时执行该语句,显然会出现此错误,因为那么lp的大小为0x0。有没有一种方法可以公式化我的代码片段,使NC = 1,以便我可以继续使用静态大小的矩阵?还是我可以以某种方式让编译器知道由于if表达式而不会执行该语句?
谢谢您的帮助!
答案 0 :(得分:0)
似乎我问得太快了。我发现有一个本征函数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矩阵的错误。