A.h
class A{
public:
B* m_;
}
這樣會編譯出錯,因爲B沒有定義
#include "B.h"
#include "B.h"
class A{
public:
B* m_;
}
但是這樣,一旦B的定義修改,那麼A.h也就會重新編譯,導致所有用到A.h的文件也需要重新編譯,這樣就造成了編譯依賴,增加了編譯的時間,在大型項目中,如果很多這樣的地方的話,甚至可能極度增加編譯時間。爲了避免這種情況,我們可以這麼做 用 class B;
A.h
class B;
class A{
public:
B* m_;
}
A.cpp
#include "B.h"
#include "A.h"
//具體實現
通過在A.h中聲明class B,在A.cpp中include B.h,這樣即使B.h改變,A.h也不會改變,其他使用到A.h的文件也就不需要重新編譯了,這樣就可以避免編譯依賴,
在大型項目中會節省很多時間
參考:
https://blog.csdn.net/qingzhuyuxian/article/details/92157301
這個例子比較確切:
// House.h
class CBed; // 蓋房子時:現在先不買,肯定要買牀的
class CHouse
{
CBed* bed; // 我先給牀留個位置
public:
CHouse(void);
virtual ~CHouse(void);
void GoToBed();
};
// House.cpp
#include "Bed.h"
#include "House.h" // 等房子開始裝修了,要買牀了
CHouse::CHouse(void)
{
bed = new CBed(); // 把牀放進房子
}
CHouse::~CHouse(void)
{
}
void CHouse::GoToBed()
{
bed->Sleep();
}
// Bed.h
class CBed
{
public:
CBed(void);
~CBed(void);
void Sleep();
};
// Bed.cpp
#include "Bed.h"
CBed::CBed(void)
{
}
CBed::~CBed(void)
{
}
void CBed::Sleep()
{
}