我有一個頭文件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