2012-05-31 152 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