我有这个结构
Data = struct('trials',{},'time',{},'theta_des',{},'vel_des',{},'trials_number',{},'sample_numbers',{});
Data(1).trials = cell(1,trials_number);
for i=1:trials_number
Data.trials{i} = struct('theta',{},'pos_err',{},'vel',{},'vel_err',{},'f_uparm',{},'f_forearm',{},'m_uparm',{},'m_forearm',{},...
'current',{},'total_current',{},'control_output',{},'feedback',{},'feedforward',{},'kp',{});
end
但是当我想添加一个值
时Data.trials{i}.theta = 27;
我收到此错误...
A dot name structure assignment is illegal when the structure is empty. Use a subscript on the structure.
任何想法如何解决?
谢谢!
答案 0 :(得分:3)
如果您查看struct
的文档,则会出现以下声明:
s = struct(field,value)
使用指定的字段和值创建结构数组。
...
...
- 如果任何
value
输入是空单元格数组{},则输出s是空的(0乘0)结构。
因为您的字段已初始化为{}
,这些是空单元格数组,您将获得一个空结构,因此您无法访问该结构,因为它是空的。如果您要初始化struct
,请使用空大括号[]
。换句话说,在for
循环中,执行以下操作:
for i=1:trials_number
Data.trials{i} = struct('theta',[],'pos_err',[],'vel',[],'vel_err',[],'f_uparm',[],'f_forearm' [],'m_uparm',[],'m_forearm',[],...
'current',[],'total_current',[],'control_output',[],'feedback',[],'feedforward',[],'kp',[]);
end
这应该为您正确初始化结构,然后您可以相应地访问字段。因此,如果我想在单元格数组中的第一个结构中初始化theta
:
Data.trials{1}.theta = 27;
现在可以使用了。您可以通过以下方式验证输出:
disp(Data.trials{1}.theta)
27