在Matlab中,我使用一个带有varargin
的自定义函数作为输入,它作用于全局变量,这些变量是填充有结构数组的单元格数组。我收到以下错误消息:
Cell contents reference from a non-cell array object.
首先,我想询问是否有人在与我相同的环境中遇到此问题。除了上下文之外,此错误消息的含义是什么?
我很难将这个问题减少到MWE。基本思路如下。构造了3x3单元阵列myArray
。在同一个.m文件中,可以使用{1,3}
访问位置myArray{1,3}
的内容。现在我想从main.m中删除read函数并定义一个自定义函数,该函数将位置作为输入并在该位置显示myArray
的内容。
%main.m
global myArray
%define myArray
...
%display content
myContent(i,j)
与
function [] = myContent(indexI,indexJ)
global myArray
disp(myArray{indexI,indexJ})
end
这导致提到的错误消息
Cell contents reference from a non-cell array object.
Error in myContent (line .)
myArray{indexI,indexJ}
答案 0 :(得分:0)
我认为您正在尝试使用花括号{}
而不是正常的()
来解决结构数组。这将为您提供准确的错误消息。
编辑:避免使用i
和j
作为变量名称,因为它们用于虚构单位。有关详细信息,请参阅this post。我的示例已使用a
和b
代替。
请尝试使用以下代码进行演示,了解如何解决您提到的类型:
function test_cellarray
global myArray
% create structure array with 2 field and 2 entries
structArr(1).field1 = 'entry1 field1';
structArr(1).field2 = 'entry1 field2';
structArr(2).field1 = 'entry2 field1';
structArr(2).field2 = 'entry2 field2';
% create cell array and write structArr to cell array
myArray = cell(3,3);
myArray{1,1} = structArr;
a = 1;
b = 1;
s = 1;
f = 'field1';
myCellContent(a,b);
myStructContent(a,b,s);
myFieldContent(a,b,s,f);
end
function [] = myCellContent(indexA,indexB)
global myArray
disp('Cell content:');
disp(myArray{indexA,indexB});
end
function [] = myStructContent(indexA,indexB,indexS)
global myArray
disp('Struct content:');
disp(myArray{indexA,indexB}(indexS));
end
function [] = myFieldContent(indexA,indexB,indexS,field)
global myArray
disp('Field content:');
disp(myArray{indexA,indexB}(indexS).(field));
end