2012-03-24 109 views
0

我正在使用前向聲明幷包含在一個小型項目中。前向聲明和包括

但有時如果我創建了一個文件。

甲包含C和D.

然後在乙包括​​A,C,d我有一些問題,我增加向前聲明它。

我注意到,有時我只是需要前向聲明,這是因爲當我以前將它添加到一個文件中,我包含在前向聲明的文件中? 就像我剛剛在B中包含A一樣,那麼C和D也包含在內? 我有一個類,我只需要添加前向聲明。 像:

Class a; 
Class b; 
Class R{ 
} 

然後將文件包括R,所以我並不需要在R中的一個,如果我這樣做,該代碼沒有編譯。它說要在{之前聲明一個類。

另一種情況是:

正向申報B,但不包括B和B包括A ..它的作品,我想它的,因爲當時的編譯器「貼」在B中的一個代碼,向前聲明告訴編譯器該類在代碼中。如果我使用ifdef/ifndef並在其中包含代碼b,它會崩潰,如果我刪除包含它作爲魅力^^

謝謝。

+3

你的問題是什麼?一般來說,有些情況下前向聲明就足夠了。但我看不出你的問題是什麼。 – 2012-03-25 00:01:33

+0

不,它只是一個例子 – Lefsler 2012-03-25 00:14:13

+0

stackoverflow是一個問答網站。看看FAQ是什麼被認爲是一個很好的問題,以及如何問一個問題。你看到的問題(沒有標題守衛,加入它們會導致崩潰)會指出你的代碼存在一些更大的問題。 – pmr 2012-03-25 00:49:31

回答

-1

我太累了,無法考慮你在那裏的所有依賴關係,但請記住#include只不過是將包含的文件完全插入到#include的位置。這是遞歸完成的,直到所有的#include指令被展開。

這也是很好的典型

#ifndef FILE_H 
#define FILE_H 
... 
#endif 
+1

也許你不應該回答,如果你太累了,不想回答這個問題,或者問題沒有得到回答? – pmr 2012-03-25 00:03:28

1

防範同一文件的多個插入除非你是引入循環依存關係,可以用前向聲明被打破,只需要使用一個#ifndef/#endif對:

#ifndef _FILE_H_ 
#define _FILE_H_ 

/* ... header file specifications ... */ 

#endif /* _FILE_H_ */ 
+0

它的東西就像一個前向聲明B,但不包括B和B包括A ..它的工作原理,我想它是因爲編譯器「粘貼」B代碼的時間,前向聲明告訴編譯器該類是在代碼中。如果我使用ifdef/ifndef並在代碼中包含代碼b,它會崩潰,如果我刪除包含它作爲魅力^^。 – Lefsler 2012-03-25 00:08:56

+0

我明白了。這爲這個問題帶來了一些清晰。 – 2012-03-25 00:15:41

+0

那麼它發生了什麼? XD,只是爲了確認 – Lefsler 2012-03-25 00:16:41