MATLAB编码器给出结构的越界误差

MATLAB编码器给出结构的越界误差,matlab,struct,mex,matlab-coder,Matlab,Struct,Mex,Matlab Coder,我正在尝试使用MATLAB的编码器工具包来MEX一些代码。这段代码最初包含单元数组,而编码人员目前无法处理这些数组,因此我决定使用structs作为补偿 我的问题是结构的大小不是固定的,这就是问题所在。我基本上是这样的: Temp= struct('a',"some variable"); for i = 2:x Temp(j).('a') = Temp(i-1).('a')*Temp(1).('a'); end 在MATLAB的命令窗口中,这是完全可以接受的,但是当尝试构建MEX文件

我正在尝试使用MATLAB的编码器工具包来MEX一些代码。这段代码最初包含单元数组,而编码人员目前无法处理这些数组,因此我决定使用structs作为补偿

我的问题是结构的大小不是固定的,这就是问题所在。我基本上是这样的:

Temp= struct('a',"some variable");
for i = 2:x
    Temp(j).('a') = Temp(i-1).('a')*Temp(1).('a');
end
在MATLAB的命令窗口中,这是完全可以接受的,但是当尝试构建MEX文件时,它会抛出以下错误:

索引表达式超出范围。试图访问元素2。有效范围为1-1。


是否有办法解决此问题,或者是否有其他解决方案可用于编码器允许的类似“单元阵列”的结构?

您可以使用
repmat

MyStruct = repmat(Temp,1,N);
其中
N
是一个常数(即硬编码,不依赖于数据)。
那么,如果你愿意

for i=2:N
    MyStruct(i).a = MyStruct(i-1).a*MyStruct(1).a;
end

不需要MyStruct(i)。('a')

+1以下是一些与文档相关的链接:。无论如何,在我看来,整个结构都可以用一个规则的数字来代替array@Amro:对于OP提供的简单示例,我同意。@谢谢!不过我现在有另一个问题。我试图存储在struct中的一些变量是复杂的。现在出现的错误是:“无法将复杂值分配到非复杂位置。”有没有办法解决此问题?@GBoggs:在首次创建结构时尝试使用复杂常量初始化,例如:
Temp=struct('a',complex(0,0))。请参阅:@GBoggs:请参阅此页:。另外,请阅读文档中解释的部分。