我有一个带有GUIDE接口的MALTAB应用程序,在OpeningFcn
函数中,在GUI可见之前执行,我已经定义了这样的全局变量:
global P1;
P1 = [];
然后我每2秒执行一次定时器功能,在此功能的最开始是:
handles=guidata(hObj);
global P1;
之后,两行函数使用P1
变量进行一些计算。一切都工作正常几个小时,然后突然我发生了这个消息:
???在为定时器'timer-1'评估TimerFcn时出错
未定义的函数或变量“P1”。
并停止了应用程序。我理解索引超出范围错误或类似但未定义的变量?怎么可能呢?
答案 0 :(得分:3)
要在回调中使用全局,请声明全局,使用它,然后从工作空间清除全局链接。这样可以避免在引用后声明全局。例如,
cbstr = sprintf('%s, %s, %s, %s, %s', ...
'global MY_GLOBAL', ...
'MY_GLOBAL = 100', ...
'disp(MY_GLOBAL)', ...
'MY_GLOBAL = MY_GLOBAL+1', ...
'clear MY_GLOBAL');
uicontrol('style', 'pushbutton', 'CallBack', cbstr, ...
'string', 'count')
话虽如此,通常永远需要使用global
变量。对于使用GUIDE构建的GUI,请考虑使用setappdata
跨函数访问变量。