gpt4 book ai didi

compiler-errors - Eigen : Eigen matrix size mismatch in if statement的编译错误

转载 作者:行者123 更新时间:2023-12-02 10:57:46 24 4
gpt4 key购买 nike

我正在使用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();
}
}

我收到的错误在我对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表达式而不会执行?

感谢您的任何帮助!

最佳答案

看来我问得太快了。我发现有一个本征函数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矩阵的错误。

关于compiler-errors - Eigen : Eigen matrix size mismatch in if statement的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56040510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com