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。