我正在尝试使用单元格数组的单元格数组,以便将数据存储在结构中。
以下是我的例子:
close all;
clear all;
clc;
register = struct('thing', [], ...
'positions', cell(1));
register.positions{1}{end+1} = {[45 36]};
register.positions{2}{end+1} = {[12 87]};
register
我收到以下错误消息:
来自非单元格数组对象的单元格内容引用。
测试错误(第8行)register.positions {1} {end + 1} = {[45 36]};
我肯定做错了什么,但我还没有尝试过很多其他事情。
感谢您的帮助
答案 0 :(得分:1)
必须首先初始化单元格。让我们分解一下:你的代码
register = struct('thing', [], 'positions', cell(1));
实际上创建了一个包含两个空字段的结构:
>> register
register =
thing: []
positions: []
使用end
直接分配(例如使用register.positions{1}{end+1}=4
)将会失败,因为第二级中的end
会尝试确定register.positions{1}
处单元格的大小,但是register.positions
本身就是空的!
那么,我们该怎么办?我们可以确保在第一次将顶级新元素引用时,我们会初始化它而不引用其内容。例如,register.positions{1} = []
将完成工作,
register.positions{1}{end+1} = [45 36];
然后会工作。 (注意:这里我没有将数组封装在另一组花括号中,因为根据你上面的评论,它们似乎并不是必需的。)
现在,为了使这更方便一点,你预分配 positions
字段中的元素数量('汽车'在你的评论中),如果它是已知的(或大于预期的数字):
register = struct('thing', [], 'positions', {cell(1, 42)})