我有一个头文件BKE_mesh.h以下组块:使用C头文件将不使用C编译,但将与C++
/* Connectivity data */
typedef struct IndexNode {
struct IndexNode *next, *prev;
int index;
} IndexNode;
void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace *mface,
const int totvert, const int totface);
void create_vert_edge_map(ListBase **map, IndexNode **mem, const struct MEdge *medge,
const int totvert, const int totedge);
注意,头文件是为的可能性制备在一个C++文件,因为它有:
#ifdef __cplusplus
extern "C" {
#endif
在文件的顶部,和需要完成在底部。但是实现它的类是用C语言编写的。接下来,每当我尝试#include头文件时,出现一个奇怪的错误。如果文件扩展名为.cpp,那么编译就好,没有任何抱怨。但是,如果我这样做:
具有.C扩展名的文件里面,我得到以下错误:
expected ')' before '*' token
的最后两个功能,在特定的变量:
ListBase **map
这两个类。 (注意早些时候在头文件中声明了它,但没有定义ListBase)。
所以,我的问题是:为什么这个有效的C++代码,而不是C代码?
谢谢。
/我sla了his头。谢谢。我认为就是这样。 (ListBase是这样定义的:struct ListBase;)。它让我想知道它是如何作为一个C文件工作的......哦,还有,不应该用extern“C”{...}来包装它,导致它出现相同的错误?谢谢。 – 2010-05-16 21:53:19
一些C编译器在当天用来自动检测这个错误。有些人曾经编译过“C”库,就好像它们是C++的C链接一样。 – Joshua 2010-05-16 22:04:02
@Leif Anderson:在extern中包装文件“C”{}除了改变链接器的工作方式外什么也不做。你似乎认为C/C++是相似的。幸运的是C++是一种完全不同的语言,应该这样对待。 Java与C具有相同的基本语义,但您不认为这两种语言是可以互换的! – 2010-05-16 22:14:49