1樓:匿名使用者
不是很明白你的問題。層層包含出什麼問題了?
通常標頭檔案定義都會加上一些預編譯指令,讓標頭檔案在被多個檔案引用的時候不會多次編譯。比如classa.h裡面可以寫:
#ifndef _classa_h_
#define _classa_h_
// source code here
#endif //_classa_h_
或者直接使用#pragma once 指令
關於標頭檔案重複包含問題
2樓:匿名使用者
從問題補充來看應該是預處理上的順序問題.標頭檔案相互包含總會有一個檔案在另一個檔案中被忽略.因為預處理時include是將包含的檔案中的**插入到當前**裡,檔案是不能包含自己的,如果相互包含編譯器只能取捨一下,否則是不可能正常通過的.
在a.h中和在b.h中#include c.h, 在才c.h中include a.h和b.h,這樣的邏輯關係本來就有問題.
如果a.h被首先處理,那麼c.h中的a.h的內容很可能是被忽略了,這就導致了c.cpp找不到a的宣告.
解決方法就是重新分配定義所在的檔案,儘量讓包含關係呈樹狀結構,迴圈結構很容易出錯.
如果a,b中需要引用c,而c中又要引用ab,最好的做法就是都放到一個檔案裡,或者只將abc的宣告寫到一個總宣告檔案,再將abc的定義寫到一個檔案或者分別寫到對應的檔案,然後再在定義檔案裡包含總宣告檔案,如:
--------------------
public.h :
class a;
class b;
class c;
--------------------
a.h :
#include "public.h"
class a
--------------------
*********************************************
使用#ifndef
比如在head1.h裡用#ifndef套住要宣告的東西:
#ifndef head1_h
#define head1_h
//宣告的內容
#endif
這樣當標頭檔案被重複包含的時候會自動跳過.
3樓:匿名使用者
使用以下結構
#ifndef xx
#define xx
#endif
4樓:匿名使用者
使用#ifndef
#ifndef a_h
#define a_h
//a.h中宣告的內容
#endif
在c/c++中如何避免標頭檔案被多次包含?
5樓:米莫的菜
標頭檔案的最開始
加入這條雜注,就能夠保證標頭檔案只被編譯一次。
#pragma once是編譯器相關的
,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。
#ifndef,#define,#endif是c/c++語言中的巨集定義,通過巨集定義避免檔案多次編譯。所以在所有支援c++語言的編譯器上都是有效的,如果寫的程式要跨平臺,最好使用這種方式具體寫法方式一:#ifndef __somefile_h__
#define __somefile_h__
... // 一些宣告語句#endif方式二:#pragma once
... ... // 一些宣告語句比較#ifndef的方式依賴於巨集名字不能衝突,這不光可以保證同一個檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被不小心同時包含。
當然,缺點就是如果不同標頭檔案的巨集名不小心“撞車”,可能就會導致標頭檔案明明存在,編譯器卻硬說找不到宣告的狀況
#pragma once則由編譯器提供保證:同一個檔案不會被包含多次。
注意這裡所說的“同一個檔案”是指物理上的一個檔案,而不是指內容相同的兩個檔案
。帶來的好處是,你不必再費勁想個巨集名了,當然也就不會出現巨集名碰撞引發的奇怪問題。對應的缺點就是如果某個標頭檔案有多份拷貝,本方法不能保證他們不被重複包含。
當然,相比巨集名碰撞引發的“找不到宣告”的問題,重複包含更容易被發現並修正。
方式一由語言支援所以移植性好,方式二 可以避免名字衝突
我還看到一種用法是把兩者放在一起的:
#pragma once
#ifndef __somefile_h__
... ... // 一些宣告語句#endif看起來似乎是想兼有兩者的優點。
在使用CCS3 3時,新增的標頭檔案包含在ument裡
ccs3.3新增標頭檔案,被新增到document裡頭去,注意,ccs3.3是不需要手工新增.h的檔案的,只要在檔案中include了標頭檔案,ccs會自動搜尋標頭檔案並且新增到include資料夾中去,搜尋路徑 project build options compiler processer in...
電腦上有許多重複的檔案,怎麼刪除重複的檔案好
白鷺丹楓 電腦上有許多重複的檔案,這些東西檔案多了,不但不方便管理,而且還佔用大量空間。刪除重複檔案,可以藉助一款軟體 duplicate cleaner free。方法 步驟 可以定義規則,內容相同,還是檔名相同相似等 2 設定好規則後,接下來就要填加要查詢的資料夾了,選擇掃描位置,新增要查詢的資...
怎麼解決工作檔案的問題
大大的 解決方法如下 1 檔案的官方叫法是人事檔案,沒有學生檔案和工作檔案的區別,你手裡的學生檔案其實就是人事檔案。中專及以上學歷就讀時,由學校負責建檔,畢業後該檔案會轉出到相應的人事管理部門。你的檔案不應放在自己手上,會為以後造成不必要的麻煩。2 如果大學畢業的,應該到人才交流中心辦理檔案掛靠 如...