2014-08-27 83 views
0

我有一个嵌套结构,其中一些字段标记为L1L2等。我尝试使用以下代码访问结构中的子结构。尝试访问结构时,Matlab编码器生成错误

lfield = lfidcalc(le); 
substruct = bmstruct.(lfield); 

由于le改变其在每次迭代值,lfield也改变其值从L1L9

但是,当我尝试构建此代码以生成C++可执行文件时,出现以下错误。

非常量表达式或空矩阵。此表达式必须是 ,因为它的值决定了某些 表达式的大小或类别。在这种情况下,字符串的值必须是已知的。

任何人都可以请帮我解决这个问题吗?

回答

1

我不确定导致您看到的错误消息的确切原因,但无论如何,MATLAB编码器不支持使用动态字段名访问结构的字段。

也许这是你所看到的直接原因,也许不是:但在任何一种情况下,你都有问题。

0

并非所有正确的matlab代码都可以转换为C/C++。特别是这种(非常方便)的代码。你把'%#eml'放在函数的第二行吗?它表明您将生成代码。来自matlab网站:“我们使用%#eml指令打开MATLAB M-Lint代码分析器,并检查功能代码是否存在错误,并推荐更正。”

+0

我记得'%#codegen'用于这个目的:http://www.mathworks.com/help/fixedpoint/ug/adding-the-compilation-directive-codegen.html。他们之间有什么不同? – Daniel 2014-08-27 20:46:08

+0

我认为%#codegen实际上更新更好。 – 2014-08-27 20:51:36

+0

@Sam Roberts。是的,我后来才知道它。现在,我必须使用静态字段名称,而不是使用开关大小写。 – suranga 2014-08-28 07:03:30