Matlab:错误消息'来自非单元数组对象的单元格内容引用。'在使用varargin,单元数组和结构数组

时间:2015-06-18 18:26:21

标签: arrays matlab global-variables cell-array

在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}

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试使用花括号{}而不是正常的()来解决结构数组。这将为您提供准确的错误消息。

编辑:避免使用ij作为变量名称,因为它们用于虚构单位。有关详细信息,请参阅this post。我的示例已使用ab代替。

请尝试使用以下代码进行演示,了解如何解决您提到的类型:

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