Qt中在各個文件中如何使用extern全局變量(大家都不推薦使用,但你不能不瞭解呀)

1. 原理

     1. 【知識點1-聲明】(拿int類型來舉例,別的類型也一樣)只能extern int myData;記住只能一個頭文件中寫一次extern int myData; 假如你寫在1.h中寫,別的頭文件就不要在重複寫哦。之後有使用到myData的文件假如x.cpp/x.c文件包含t1.h即可;(記住:只有一個頭文件 聲明:extern int myData;使用時只包含頭文件即可,除t1.cpp(可以別的t2.cpp等)例外即要有一個文件定義一次,見下面的知識點2-定義)

     2. 【知識點2-定義】只能有一個文件定義一次myData即這樣寫:int myData;記住只能有一個文件寫就行,別多重複定義,最好跟上面的頭文件對應t1.cpp中聲明定義。(記住:只有一個實現文件x.cpp/x.c文件定義:int myData;記住是定義,可以賦值或者不賦值)【這最算是使用,不過是在內存中開始產生這號人物】

     3.【知識3-使用】 如在t2.cpp 、t3.cpp、t4.cpp中使用 只要包含聲明有extern int myData;頭文件即可,記住別定義呀,否則提示送給你一個禮包 “error:multiple definition of ’XXX‘錯誤”,於是,你可在網上忙半天,好多人還寫得不清不楚(表達問題),但他自己真的解決了問題,你卻看得有點累。如果你按照上面操作好了,後面就可以在t2.cpp 、t3.cpp、t4.cpp的函數中就可以直接使用myData了。

 2. 舉例唄

(看下面直接忽略//的註釋,如果看不明白了再看//的內容)

1.【知識點1-聲明】舉例

     t1.h 中:

      extern int myData;

 

2. 【知識點2-定義】舉例

t1.cpp中:                  //當然也可以別的文件,但是定義只能定義 一次

#include "t1.h"             //如果你的不是當前路,自己弄好路徑,這個不用說吧

 int myData;                  //只在一個文件件中這樣做一次,後面別的文件想用時,只包頭文件就可以了

 // int myData =0;          //可以定義可以賦值,可以不賦值

 3.【知識3-使用】舉例

t2.cpp中:

#include "t1.h"           //如果你的不是當前路,自己弄好路徑,這個不用說吧

//注意在t1.cpp中已經定義了,後面使用的文件就不要定義myData,直接拿來用即可

//假如你的t2.cpp中有一個方法需要用到myData,這個方法就int getMyData();於是可以這樣

int xxx::getMyData() //在Qt中方法不是類方法,我一巴掌過去,所以有xxx::不解釋了了

{

    return myData;

//只包含聲明myData的頭文件,就直接使用myData,前面不要聲明,或者定義(說得夠明白了,都有點囉嗦了,汗)

}

t3.cpp中:

同t2.cpp

3.【優、缺點】破壞封裝性

如果你的程序沒有上面這方面的顧慮,用extern完全不是個事。

如果你非要封裝才幹活,好吧,那麼使用static吧,定義一個類,然後在這個類中static int myData;

步驟與extern上面的差不多。extern的優點就是便捷呀,流浪漢一個,想幹啥幹啥(前提別犯法,否則沒自由可談,更別提想幹啥了,但extern在程序世界裏真可以哈)。

PS:

與MFC使用extern有點區別,有點坑,寫MFC的兄弟以習慣性的方式使用,絕對可以浪費你半個小時來解決這個問題,Qt可能說坑的就是你MFC。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章