2012-05-31 56 views
0

我有這個cpp文件,其中包括一堆C文件。C++包括C文件(找不到typedef)

的main.cpp

extern "C" { 
#include "types.h" 
#include "file1.h" 
} 
... 

types.h中

#IFNDEF TYPES_H 
#DEFINE TYPES_H 
typedef unsigned short int char16; 
... 
#ENDIF // TYPES_H 

file1.h

#include "file2.h" 
... 

file2.h

... 
char16* testCode(); 
... 

出於某種原因,編譯器給我的char16未聲明的錯誤。任何想法爲什麼包含不從CPP文件繼承到C文件?任何幫助表示讚賞。謝謝!

+0

'#IFNDEF','#DEFINE'和'#ENDIF'是非法的預處理指令 - 它們必須是小寫。你也不應該用'extern「C''來包裝'#include'語句。將*置於頭文件中,並用'#ifdef __cplusplus' /'#endif'對保護。 –

回答

2

您應該在file2.h中包含types.h。你似乎沒有這樣做。

順便說一句,代碼發佈編譯在我的機器上沒有任何錯誤,而如果我在main.cpp中註釋"#include "types.h",它給了我一個錯誤。

+0

確實如此。但是file2.h有一個byrocracy問題,我不能對它做任何修改,所以還有其他解決方法嗎?爲什麼它不被預處理器「繼承」? – drodil

+0

我想我明白了這個問題,你是說當你在多個頭文件中包含相同的頭文件時,編譯器會抱怨char16已經被定義了嗎?也許傑知道你是否可以轉發聲明char16? –

+0

因爲它在IFNDEF宏中,所以很多地方都沒有問題,包括types.h。這裏的問題是我不能對file1.h或file2.h進行更改,所以我應該用其他方式解決問題。雖然它可能不可能(?) – drodil