2014-12-31 52 views
0

我正在用C寫一個程序,我需要用不同的模塊構建它。與不同的頭文件共享數據結構

我定義了一個數據結構,以便在其中一個模塊的頭文件中創建一個鏈表。

當我將這個頭文件包含在其他模塊中時,我的程序不能編譯。

我的結構定義是:

typedef struct node 
{ 
    char bla[10]; 
    int num; 
    struct node* next; 
}Name; 

我不知道什麼是實現這個正確的方法。 謝謝

+4

編譯器給出了什麼錯誤? – pat

回答

0

在其他頭文件中,只需使用前向聲明。你不需要定義它,因爲這將創建一個重複的定義。鏈接器將處理實際定義中的鏈接。

所以,如果你曾在頭一個定義的給定結構,在接頭連接器B使用它,你只需把下面一行標題

struct node; 
    typedef struct node Name; 

那麼這將使你的頂部在該頭文件的函數聲明中使用聲明。

如果您試圖將函數定義實際放入頭文件中,則需要使用預處理器宏來防止遞歸包含該文件。

a.h,你乾脆把

#ifndef __A 
    #define __A 
    #include "b.h" 
    ... 

    #endif 

然後在b.h你會把

#ifndef __B 
#define __B 

    ... 

#endif 

這樣,即使您在main.ca.hb.h,也不會有一個遞歸包含,並且編譯將會成功。

理想情況下,標題僅限於結構/類型定義和函數聲明,所以前向聲明都是需要的。