多个varargout matlab错误

时间:2015-05-04 20:53:28

标签: matlab matlab-guide variadic-functions

我创建了一个多窗口GUI,并且暂时将这个问题弄糊涂了:

我有两个按钮的主GUI窗口,这两个按钮通向另外两个GUI窗口。一个没有output_fcn选项并正常关闭,但另一个GUI窗口有4个输出参数,我在子窗口中使用,问题是:

  

尝试引用非结构数组的字段。

当我试图关闭窗户时。 这里有一些代码:

function varargout = changeme_dialog1_OutputFcn(hObject, eventdata, handles) 
varargout{1} = get(handles.varP1,'String');
varargout{2} = get(handles.varP2,'String');
varargout{3} = get(handles.varP3,'String');
varargout{4} = get(handles.varP4,'String');

错误首先出现在varargout{1}中。

有什么问题?

1 个答案:

答案 0 :(得分:0)

几年前我遇到了这个问题,如果事实证明是同样的问题,我会感到非常惊讶。问题是,在调用OutputFcn时,handles结构已被删除\清除,因此您会收到错误,因为您试图引用MATLAB甚至没有的内容识别为struct

我在appdata期间OutputFcnstoring中的输出retrieving {注意:没有什么能阻止您检索调用代码中的数据,但是如果你尊重范围这是一个更“正确”的方式来实现它IMO):

  • 步骤1:点击“关闭窗口”按钮后,将输出保存到appdata:

    function pushbutton1_Callback(hObject, eventdata, handles)
      setappdata(0,'Output',{...
        [handles.Hor1 handles.Ver1], [handles.Hor2 handles.Ver2]...
        [handles.Hor3 handles.Ver3], [handles.Hor4 handles.Ver4]...
        })
    
      delete(handles.figure1); %// This actually initiates figure removal
    

    (此处Hor1 ... Ver4只是句柄中的一些示例字段。在您的情况下,它将是get(handles.varP1,'String');等。)

  • 第2步:从appdata中追溯输出,clearing之后

    function varargout = changeme_dialog1_OutputFcn(hObject, eventdata, handles) 
      ...
      varargout{1}=getappdata(0,'Output'); %// <== Wizardry Part 2
      rmappdata(0,'Output') ;
      ...
    

我希望这有助于或至少指出你正确的方向。