C++跨类调用——extern
方式:全局變量實現跨類調用(extern)
環境:MFC
目的:兩個Dialog(Class),A和B,想在B中調用?A中的變量(IplImage * img)
實現:在A.cpp 添加代碼如下
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CADlg * pADlg = new CADlg;
? ? ? ? ? ?在A.cpp的構造函數(和類名同名的函數)中添加代碼如下
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?pADlg = this;
這樣就有一個全局指針變量pADlg指向了實例對象
調用:在B.cpp添加代碼如下
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??extern CADlg *pADlg;
1基本解釋:extern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。此外extern也可用來進行鏈接指定。
????? 也就是說extern有兩個作用,(本段取自其他地方,僅供大家方便理解)
第一個,當它與"C"一起連用時,如: extern "C" void fun(int a, int b);則告訴編譯器在編譯fun這個函數名時按著C的規則去翻譯相應的函數名而不是C++的,C++的規則在翻譯這個函數名時會把fun這個名字變得面目全非,可能是fun@aBc_int_int#%$也可能是別的,這要看編譯器的"脾氣"了(不同的編譯器采用的方法不一樣),為什么這么做呢,因為C++支持函數的重載啊,在這里不去過多的論述這個問題,如果你有興趣可以去網上搜索,相信你可以得到滿意的解釋!
??? 第二,當extern不與"C"在一起修飾變量或函數時,如在頭文件中: extern int g_Int;?它的作用就是聲明函數或全局變量的作用范圍的關鍵字,其聲明的函數和變量可以在本模塊活其他模塊中使用,記住它是一個聲明不是定義!也就是說B模塊(編譯單元)要是引用模塊(編譯單元)A中定義的全局變量或函數時,它只要包含A模塊的頭文件即可,在編譯階段,模塊B雖然找不到該函數或變量,但它不會報錯,它會在連接時從模塊A生成的目標代碼中找到此函數。
總結
以上是生活随笔為你收集整理的C++跨类调用——extern的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三年程序员之后的思考
- 下一篇: s3c2440移植MQTT