最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VC++開發(fā)中完美解決頭文件相互包含問(wèn)題的方法解析

 更新時(shí)間:2013年09月16日 09:11:21   作者:  
本文中,為了敘述方便,把class AClass;語(yǔ)句成為類AClass的聲明,把class AClass開始的對(duì)AClass的類成員變量、成員函數(shù)原型等的說(shuō)明稱為類的定義,而把在CPP中的部分稱為類的定義

所謂超前引用是指一個(gè)類型在定義之前就被用來(lái)定義變量和聲明函數(shù)。

一般情況下,C/C++要求所有的類型必須在使用前被定義,但是在一些特殊情況下,這種要求無(wú)法滿足,例如,在類CMyView中保留了一個(gè)非模式對(duì)話框?qū)ο笾羔槪搶?duì)象用于顯示/修改一些信息。為了實(shí)現(xiàn)對(duì)話框"應(yīng)用"按鈕,把對(duì)話框做的修改立刻更新到view界面上,為此,需要在對(duì)話框類中需要保存view類的指針,這樣定義關(guān)系就變成如下的代碼:

復(fù)制代碼 代碼如下:

   #ifndef __MYVIEW_H__
   #define __MYVIEW_H__
   //這是view類的頭函數(shù)
   #include "MyDialog.h"
   class CMyView::public CView
   {
   protected:
       CMyDialog * pDlg;
       //這里是其他定義
   };
   #endif

   #ifndef __MYDIALOG_H__
   #define __MYDIALOG_H__
   //這是對(duì)話框類的定義
   #include "MyView.h"
   class CMyDialog::public CDialog
   {
       protected:
CMyView * pView;
//其他定義
   };
   #endif

從編譯器角度看,編譯MyDialog.CPP時(shí),系統(tǒng)首先定義宏__MYDIALOG_H__,然后包含MyView.h,MyView.h中的#include "MyDialog.h"由于__MYDIALOG_H__已經(jīng)定義,所以不再起作用。在CMyView類的聲明中,CMyDialog* pDlg ;就會(huì)讓編譯器產(chǎn)生"CMyDialog"類型沒(méi)有定義之類的錯(cuò)誤,編譯MyView.CPP文件出現(xiàn)的錯(cuò)誤可以類似得到。   

一般的情況,類A和類B需要彼此互相引用,這樣必然有一個(gè)類會(huì)先被定義,而另外一個(gè)類后被定義,這樣在先被定義的類引用后被定義的類的時(shí)候,就導(dǎo)致了所謂的超前引用。

超前引用導(dǎo)致的錯(cuò)誤有以下幾種處理辦法:

1) 使用類聲明
在超前引用一個(gè)類之前,首先用一個(gè)特殊的語(yǔ)句說(shuō)明該標(biāo)識(shí)符是一個(gè)類名,即將被超前引用。其使用方法是:
a)  用class ClassB;聲明即將超前引用的類名
b)  定義class ClassA
c)  定義class ClassB;
d)  編制兩個(gè)類的實(shí)現(xiàn)代碼。
上述方法適用于所有代碼在同一個(gè)文件中,一般情況下,ClassA和ClassB分別有自己的頭文件和cpp文件,這種

方法需要演變成:
a) 分別定義ClassA和ClassB,并在cpp文件中實(shí)現(xiàn)之
b) 在兩個(gè)頭文件的開頭分別用class ClassB;和class ClassA;聲明對(duì)方
c) 在兩個(gè)cpp文件中分別包含另外一個(gè)類的頭文件
NOTE:這種方法切記不可使用類名來(lái)定義變量和函數(shù)的變量參數(shù),只可用來(lái)定義引用或者指針。    

2) 使用全局變量
由于全局變量可以避免超前引用,不用贅述。我的習(xí)慣是,把類對(duì)象的extern語(yǔ)句加在該類頭文件的最后,大家喜歡怎樣寫那都沒(méi)有什么大問(wèn)題,關(guān)鍵是保證不要在頭文件中胡亂包含。

3) 使用基類指針。
這種方法是在引用超前引用類的地方一律用基類指針。而一般情況下,兩個(gè)互相引用的類并不涉及其基類,因此不會(huì)造成超前引用。以開始的例子說(shuō):在CMyDialog類中用CView*代替CMyView*,在CMyView類中用CDialog*代替CMyDialog*,這樣必然不會(huì)造成超前引用。

說(shuō)明:本文中,為了敘述方便,把class AClass;語(yǔ)句成為類AClass的聲明,把class AClass開始的對(duì)AClass的類成員變量、成員函數(shù)原型等的說(shuō)明稱為類的定義,而把在CPP中的部分稱為類的定義。如果大家對(duì)這三個(gè)詞有不同的理解,請(qǐng)按照自己的本意把這三個(gè)詞換成相應(yīng)的詞來(lái)理解。

ps:我是用第一種方法解決問(wèn)題的。

相關(guān)文章

  • 利用C++求絕對(duì)值的幾種方法例子

    利用C++求絕對(duì)值的幾種方法例子

    相信大家在學(xué)習(xí)C++時(shí),應(yīng)該都有做過(guò)求絕對(duì)值的題目,下面這篇文章主要給大家介紹了關(guān)于利用C++求絕對(duì)值的幾種方法例子,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • C++私有繼承(三)

    C++私有繼承(三)

    這篇文章主要介紹了C++私有繼承(三),前面的文章我們已經(jīng)介紹過(guò)了C++私有繼承(一)和(二),下面小編就繼續(xù)基于之前的內(nèi)容繼續(xù)向大家介紹C++私有繼承,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-02-02
  • C++獲取當(dāng)前時(shí)間戳的幾種常用方法

    C++獲取當(dāng)前時(shí)間戳的幾種常用方法

    在我們寫程序時(shí),通過(guò)寫時(shí)間戳可以方便我們進(jìn)行日志記錄、調(diào)試、計(jì)算程序運(yùn)行時(shí)間、緩存過(guò)期控制等,因此下面介紹使用C++代碼獲取時(shí)間戳的方法以及一些常見(jiàn)的應(yīng)用場(chǎng)景,需要的朋友可以參考下
    2025-08-08
  • C++中的STL常用算法之遍歷算法詳解

    C++中的STL常用算法之遍歷算法詳解

    這篇文章主要介紹了C++中的STL常用算法之遍歷算法詳解,ransform() 可以將函數(shù)應(yīng)用到容器的元素上,并將這個(gè)函數(shù)返回的值保存到另一個(gè)容器中,它返回的迭代器指向輸出容器所保存的最后一個(gè)元素的下一個(gè)位置,需要的朋友可以參考下
    2023-12-12
  • 頭文件不宜定義變量的原因全面解析

    頭文件不宜定義變量的原因全面解析

    以下是對(duì)頭文件不宜定義變量的原因進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C語(yǔ)言詳細(xì)分析講解關(guān)鍵字const與volatile的用法

    C語(yǔ)言詳細(xì)分析講解關(guān)鍵字const與volatile的用法

    在C語(yǔ)言中,我們經(jīng)常會(huì)見(jiàn)到const和volatile這兩個(gè)關(guān)鍵字,那么我們今天就來(lái)介紹下這兩個(gè)關(guān)鍵字,提起?const?關(guān)鍵字,我們可能首先想到的是經(jīng)過(guò)它修飾的變量便是常量了。其實(shí)我們這種想法是錯(cuò)誤的,其實(shí)?const?修飾的變量是只讀的,其本質(zhì)還是變量
    2022-04-04
  • C語(yǔ)言中static與sizeof查缺補(bǔ)漏篇

    C語(yǔ)言中static與sizeof查缺補(bǔ)漏篇

    static在修飾變量的時(shí)候,如果是修飾全局變量,則跟全局變量功能一樣;如果是修改局部變量,則每次調(diào)用的時(shí)候,保持著上一次的值;而sizeof是用來(lái)判斷一個(gè)變量及數(shù)據(jù)類型所占字節(jié)數(shù)的,下面我們?cè)敿?xì)來(lái)看看
    2022-07-07
  • C++趣味算法之偵探推理

    C++趣味算法之偵探推理

    本文詳細(xì)講解了C++趣味算法之偵探推理,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C++中約數(shù)定理的實(shí)例詳解

    C++中約數(shù)定理的實(shí)例詳解

    這篇文章主要介紹了C++中約數(shù)定理的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 基于內(nèi)核線程的創(chuàng)建、使用和退出以及延時(shí)宏的補(bǔ)充說(shuō)明介紹

    基于內(nèi)核線程的創(chuàng)建、使用和退出以及延時(shí)宏的補(bǔ)充說(shuō)明介紹

    本篇文章是對(duì)內(nèi)核線程的創(chuàng)建、使用和退出以及延時(shí)宏的補(bǔ)充說(shuō)明介紹進(jìn)行了敘述。需要的朋友參考下
    2013-05-05

最新評(píng)論

阜康市| 尚志市| 沾化县| 万州区| 七台河市| 台北县| 鲜城| 奎屯市| 华池县| 镇雄县| 会泽县| 临沧市| 花垣县| 河西区| 中卫市| 南昌县| 望都县| 扶绥县| 绍兴县| 馆陶县| 都匀市| 左云县| 田东县| 廊坊市| 井冈山市| 五大连池市| 元谋县| 鄂托克前旗| 万荣县| 邛崃市| 根河市| 武川县| 马鞍山市| 巴林右旗| 将乐县| 郴州市| 阆中市| 河源市| 泾阳县| 柘城县| 阿拉善右旗|