c++ 一个头文件引用另一个头文件的类
----C++頭文件相互引用,一個#include,另一個class C
C++頭文件相互#include時最好是:
(1)在"CA.h"中?#include "CB.h".
(2)在"CB.h"中用類的前向聲明: class CA;
(3)最好加上頭文件衛士( #ifndef ***???#define ***??#endif)
示例如下:
(1)"CA.h":
#ifndef HEADER_CA
#define HEADER_CA?
#include "CB.h"?
class CA
{
?????????CB* pB;
?????????CB b;//正確,因為此處已經知道CB類的大小,且定義了CB,可以為b分配空間
};?
#endif
(2)"CB.h":
#ifndef HEADER_CB
#define HEADER_CB?
class CA;//這個必須要用,不能只用#include "CA.h",如果只是#include "CA.h"而沒有class CA;則會報錯.原因如附錄[1].
class CB
{
?????????CA* pA;
?????????//CA a;//錯誤,因為此時還不知道CA的大小,無法分配空間
};?
#endif?
---------------
(3)"CA.cpp":
#include "CA.h"
?
但是,.cpp文件只能#include “CA.h”.如果#icnlude “CB.h”則錯誤(展開后CA不識別CB),原因可自己分析.
CB.h重復包含
?
?
定義了兩個頭文件
//a.h
#include"b.h"
class a
{
…
b *b1;
};
//=========================
//b.h
#include "a.h"
class b
{
…
a *a1;
};
這樣子是編譯不了;解決方式如下:
解決方法一:(試過好用)
不需要這么包含,除非必要,
如果你只是想在另外一個類中定義一個類的成員變量,只要在頭文件中加入?class 類名;
然后要在.cpp文件中再包含這個頭文件就可以了。(這是必須的,不然找不到),因為這種方式只是在頭文件中包含了該類,在源文件中還不包含,這樣做只是為了避免相互包含報錯。
//a.h
class b;??//由原來的#include "b.h"變為class b;(或者相反)
class a
{
??…
??b *b1;
};
//=========================
//b.h
#include "a.h"
class b
{
…
a *a1;
};
?
第二種解決方案:
加入宏定義
#ifndef __A_H__
#define __A_H__
class b;
class a
?{
...
}
#endif
b.h
#ifndef __B_H__
#define __B_H__
class a;
class b
?{
...
}
#endif
?
來自 <https://blog.csdn.net/CSDNwei/article/details/50699298>
總結
以上是生活随笔為你收集整理的c++ 一个头文件引用另一个头文件的类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021凯络趋势报告
- 下一篇: 中国共享经济发展报告