为啥 MATLAB 报告我的变量未初始化?

Posted

技术标签:

【中文标题】为啥 MATLAB 报告我的变量未初始化?【英文标题】:Why is MATLAB reporting my variable uninitialized?为什么 MATLAB 报告我的变量未初始化? 【发布时间】:2009-03-23 14:41:22 【问题描述】:

我创建了一个类,在其中一种方法中我需要计算两点之间的距离。所以我写了一个名为“remoteness”的普通函数来为我做这件事。

编译错误:

在编译时,“远程”是 确定为一个变量,这 变量未初始化。 “remoteness”也是一个函数名 和以前版本的 MATLAB 将 已调用该函数。

但是,MATLAB 7 禁止在相同的上下文中使用相同的名称作为函数和变量。

==> TRobot>TRobot.makeVisibilityGraph 在 58 处出错 obj.visiblityGraph(k,k+1) = remoteness(:,obj.VGVertices(k),obj.VGVertices(:,k+1));

我认为名称 remoteness 可能是另一个函数的名称,但是当我将其名称更改为 kamran 时,错误仍然存​​在。需要注意的是,我可以在命令行中使用kamran函数(或remoteness)没有任何问题。

命令行示例:

>> kamran([0,0],[3,4])

ans = 5

kamran函数的代码在单独的m文件中。

kamran 函数代码:

function dist = kamran(v1,v2)
    dist = sqrt(    (v1(1) - v2(1)) ^2  + (v1(2) - v2(2)) ^2   );

kamran函数如何使用的代码示例:

function obj = makeVisibilityGraph(obj)
          verticesNumber = 0; 
          for num = 1: size(obj.staticObstacle,2)
              verticesNumber = verticesNumber + size(obj.staticObstacle(num).polygon,2);
          end
          % in the below line, 2 is for start and goal vertices
           obj.visibilityGraph = ones(2 + size(obj.VGVertices,2)) * Inf;
           for j=1 : size(obj.staticObstacle,2)
              index = size(obj.VGVertices,2);
              obj.VGVertices = [obj.VGVertices, obj.staticObstacle(j).polygon];
              obj.labelVGVertices = [obj.labelVGVertices, ones(1,size(obj.staticObstacle(j).polygon,2))* j ];
              for k = index+1 : (size(obj.VGVertices,2)-1)
                  obj.visiblityGraph(k,k+1) = kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));
              end
%             as the first and last point of a polygon are visible to each
%             other, so set them visible to each other
              obj.visibilityGraph(index+1,size(obj.VGVertices,2)) = ...
                               kamran( obj.VGVertices(:,index+1), obj.VGVertices(:,size(obj.VGVertices,2)));
           end     


end

【问题讨论】:

【参考方案1】:

您似乎正在尝试将 kamran 用作数组:

 kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));

注意到第一个参数“:”了吗?

我敢打赌 MATLAB 假定 kamran(此处称为)应该是一个 3 维数组,而您正在尝试选择包含

的子集
kamran(all-of-first-index, Nth-of-second, Mth-of-third)

第二次调用 kamran 看起来不错:

kamran( obj.VGVertices(:,index+1), obj.VGVertices(:,size(obj.VGVertices,2))

【讨论】:

+1 好收获!这很可能是错误的来源。我只注意到对 kamran 的第二次调用并没有发现问题。 哈。我走在正确的轨道上,但不知道语法是什么意思。很好的解释,Jukka。【参考方案2】:

我不知道 MATLAB,但我注意到这一行,您正在运行 kamran,看起来像 3 个参数。在所有其他情况下,它使用 2 个参数执行。也许这有什么关系?

  kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));              

【讨论】:

以上是关于为啥 MATLAB 报告我的变量未初始化?的主要内容,如果未能解决你的问题,请参考以下文章

为啥需要 .bss 段?

为啥 cppcheck 工具找不到未初始化的变量?

Clang 没有报告 C++ 中未初始化的变量?

为啥返回未初始化的变量时编译器不报错?

JAVA中变量初始化之后, 为啥还要做判空处理?

tensorflow变量初始化问题? 如图,在代码中我已经初始化了变量,为啥还提示未初始化变量