溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中頭文件設(shè)計(jì)

發(fā)布時(shí)間:2020-07-09 09:50:46 來(lái)源:網(wǎng)絡(luò) 閱讀:244 作者:一杯開心茶 欄目:軟件技術(shù)

對(duì)于小工具程序而言,用C++編寫估計(jì)也就幾個(gè)文件,此時(shí)很少設(shè)計(jì)頭文件互相包含引發(fā)的編譯出錯(cuò)問(wèn)題。
但是當(dāng)軟件功能越來(lái)越多,功能越來(lái)越復(fù)雜,各模塊之間的調(diào)用關(guān)系也越來(lái)越不明顯,此時(shí)很有可能會(huì)出現(xiàn)A頭文件包含B頭文件,B頭文件包含A頭文件的情況,這種互相包含頭文件會(huì)導(dǎo)致出現(xiàn)找不到編譯類型的錯(cuò)誤。
最簡(jiǎn)單的代碼如下:
A.h如下

#include "B.h"
class A
{
    B b;
}

A.cpp如下

#include "A.h"
class A
{
     ...
}

B.h如下

#include "A.h"
class B
{
  A a;
}

B.cpp如下

#include "B.h"
class B
{
...
}

如果文件是上述這種情況,則編譯出現(xiàn)找不到類型,因?yàn)轭^文件中A包含了B頭文件,B中又包含了A頭文件,這種循環(huán)包含會(huì)導(dǎo)致編譯出錯(cuò)。

解決辦法
解決辦法采用前置聲明。
改后代碼如下
A.h如下

class B;
class A
{
    B b;
}

A.cpp如下

#include "A.h"
#include "B.h"
class A
{
     ...
}

B.h如下

class A
class B
{
  A a;
}

B.cpp如下

#include "B.h"
#include "A.h"
class B
{
...
}

如果想一勞永逸呢?
對(duì)于經(jīng)常用到的模塊的頭文件,可以統(tǒng)一寫一份前置聲明文件,將常用的聲明都寫入這個(gè)頭文件,比如叫做includeDeclare.h,然后將其實(shí)際的頭文件都放入一個(gè)文件,比如includeHeaders.h中。這樣后續(xù)其他地方使用的時(shí)候,只要在頭文件中引入includeDeclare.h,在實(shí)現(xiàn)cpp文件中引入includeHeaders.h。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI