未定义的变量无处不在

时间:2014-02-21 13:37:07

标签: matlab matlab-guide

我有一个带有GUIDE接口的MALTAB应用程序,在OpeningFcn函数中,在GUI可见之前执行,我已经定义了这样的全局变量:

global P1;
P1 = [];

然后我每2秒执行一次定时器功能,在此功能的最开始是:

handles=guidata(hObj);
global P1;

之后,两行函数使用P1变量进行一些计算。一切都工作正常几个小时,然后突然我发生了这个消息:

  

???在为定时器'timer-1'评估TimerFcn时出错

     

未定义的函数或变量“P1”。

并停止了应用程序。我理解索引超出范围错误或类似但未定义的变量?怎么可能呢?

1 个答案:

答案 0 :(得分:3)

根据documentation for global

  
    

要在回调中使用全局,请声明全局,使用它,然后从工作空间清除全局链接。这样可以避免在引用后声明全局。例如,

  
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跨函数访问变量。