2009-12-03 37 views
0

我正在讀從Doom 3的SDK一些代碼(在VS溶液)時,我發現這樣的報頭的報頭:澄清而不#包括

#ifndef __PLAYERICON_H__ 
#define __PLAYERICON_H__ 

    class idPlayerIcon { 
     public: 
      idPlayerIcon(); 
      ~idPlayerIcon(); 

     ...... // omitted 

     public: 
      playerIconType_t iconType; 
      renderEntity_t  renderEnt; 
      qhandle_t  iconHandle; 

     }; 

#endif /* !_PLAYERICON_H_ */ 

頭沒有向前類聲明也不#按照我的經驗,它應該導致如下錯誤:未聲明的標識符或語法錯誤,導致renderEntity_t和qhandle_t未被「看到」。 那麼如何才能正確編譯? 預先感謝您的答案。

回答

4

因爲每次被包含時,所需的實體都在它之前被前向聲明/包含,因此所有事物都是在包含點處定義的。正如你所說的,它不會以任何其他方式工作。

+0

哎,這東西總是非常有趣調試。 – 2009-12-03 20:15:35

3

我想他們在包括這個之前包含其他標題。

2

由於這是一個頭文件,它可能會在其他地方包含一個命令(這個文件在哪裏使用?)。只要renderEntity_t和qhandle_t在包含此文件之前將其放入符號表中,則無關緊要。

1

有什麼叫做stdafx.h?大多數VS項目都有這些。

它只是一個包含應用程序所需的所有文件的頭文件,以減少包含頭文件的編譯時間。

那麼它將包含這樣的事情:

#ifndef _STDAFX_H_ 
#define _STDAFX_H_ 

#include "playerIconAndOtherVariables.h" 
#include "thatFileYouListed.h" 

#endif 
+0

不,沒有..但我會檢查另一個預編譯頭,也許有另一個名稱:)謝謝輸入 – Salv0 2009-12-03 21:01:41