2014-02-21 57 views
2

我有GUIDE接口MALTAB應用,在OpeningFcn功能是可見我已經定義這樣的全局變量:未定義的變量無處

global P1; 
P1 = []; 

然後,我必須執行每2秒定時器功能在這個函數的最開始是:

handles=guidata(hObj); 
global P1; 

兩條線功能後使用P1變量使得一些計算。一切工作正常工作幾個小時,然後突然發生了這條消息:

???在評估定時器'timer-1'的TimerFcn時出錯

未定義的函數或變量「P1」。

並且應用程序停止。我會理解索引超出範圍錯誤或類似但未定義的變量?這怎麼可能呢?

回答

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來訪問跨功能的變量。