【问题标题】:Octave, Error undefined variable, not recognized data array as input of an functionOctave,错误未定义变量,未将数据数组识别为函数的输入
【发布时间】:2021-12-28 22:43:15
【问题描述】:

我的所有变量都在我的主脚本中声明,如下所示:

DataArray.a = 1;  
DataArray.b = 2;
DataArray.c = 3;  
d = 4;  
e = 5;  
f = 6;  

DataArray = test1_2 (DataArray);

disp(DataArray);

主脚本也适用于某些功能。 这些函数的输入是主脚本中声明的数据数组:

function DataArray = test1_2 (d, e, f, DataArray )

g = DataArray.a;
h = DataArray.b;

DataArray.result = d * g;
endfunction

当我运行主脚本时出现以下错误:

错误:“'DataArray' 在第 28 行第 5 列附近未定义”
错误:从第 28 行第 3 列的 test1_2 调用

第 28 行是以下行:g = DataArray.a

如果我输入例如 DataArray.a,octave 知道它已声明并给出“1”。

如何在我的主脚本和函数中使用相同的数据数组?

【问题讨论】:

  • “没有将数据传递给函数”是什么意思?我添加了我的函数的代码..
  • 1) 函数 test1_2 被定义为有 4 个输入参数,但您只用一个输入调用它。 2) 输入参数ef 没有在函数的任何地方使用,这使得它们无用。 3) 变量h 没有任何作用,因为它没有被进一步使用,也没有作为输出被取出。 4) 错误信息提示test1_2 中至少有28 行。您没有显示那么多行,我们无法猜测您的代码并找到其中的问题。 5) 帮助我们创建minimal reproducible example
  • 这就是所有的程序代码,上面从第 1 行到第 25 行只有一些描述行。我知道有一些变量没有使用,但这只是解释我的问题的快速尝试..我会为你纠正它
  • 使用您对示例所做的最新更改,没有错误。这是否意味着您已经自己解决了问题,或者您仍然有同样的问题?

标签: octave


【解决方案1】:

当你说

DataArray = test1_2 (DataArray);

您的test1_2 函数使用一个参数调用。函数内部:

function DataArray = test1_2 (d, e, f, DataArray )

只定义了第一个参数d。其他参数仍未定义。请注意,函数内的参数名称与您用于调用函数的变量名称完全无关。也就是说,在函数内部,变量d 包含函数外部DataArray 包含的任何内容,而不是函数外部变量d 内部的内容。 Octave 不会尝试像这样匹配变量名。

因此,鉴于您的函数需要 4 个输入参数,您应该这样称呼它:

DataArray = test1_2(d, e, f, DataArray )

我建议您阅读 MATLAB 的优秀教程,例如 these about writing functions。如您所知,Octave 主要模仿 MATLAB 语法,因此 MATLAB 教程也是开始使用 Octave 的好方法。

【讨论】:

  • 感谢您的回答!除了变量的较小错误之外,我的问题是,该 octave 无法识别函数中的 DataArray。它说:“DataArray.a 是一个未定义的变量”,尽管它是在主脚本中声明的。我该如何解决这个问题?
  • @Manu.l:正如我在答案中所说,您需要使用 4 个参数调用您的函数。我在答案中展示了如何做到这一点。除非您将它们作为参数传入,否则该函数不会看到在其外部定义的变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多