對(duì)于小工具程序而言,用C++編寫估計(jì)也就幾個(gè)文件,此時(shí)很少設(shè)計(jì)頭文件互相包含引發(fā)的編譯出錯(cuò)問題。
但是當(dāng)軟件功能越來越多,功能越來越復(fù)雜,各模塊之間的調(diào)用關(guān)系也越來越不明顯,此時(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。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。