2011-12-21 49 views
0
liststructs.h: 

struct _data_object { 
    int temp; 
int interval_length; 
}; 
typedef struct _data_object temp_data_object; 

struct _list_node { 
data_object *temp_data; 
struct _list_node *prev; 
struct _list_node *next; 
}; 
typedef struct _list_node list_node; 

struct _list { 
int time; 
list_node *head; 
list_node *tail; 
}; 
typedef struct _list list; 


list.h: 
list_node *alloc_node(int temp, int interval_length); 
list_node *alloc_dummy_node(void); 
list *alloc_temp_list(void); 
void delete_first(list *list); 
void insert_node(list *list, list_node *new_node); 
void insert(list *list, int temperature, int interval); 

我然後叫calculations.cmain.c另一個文件使用,但後來我在calculations.h聲明extern list *xs;(它在calculations.c定義),報告說: Error[Pe020]: identifier "list" is undefined鏈表,結構包容問題

我已經包括liststructs.hlist.hcalculations.cmain.c的順序並且想要在calculationsmain中使用xs

另外: 什麼是好?要在同一個頭文件中聲明結構體和列表操作或將它們分開?

+0

你包括''calculations.h'您liststructs.h'正在使用的標識符'list'過嗎? – AusCBloke 2011-12-21 10:30:46

回答

0

使用#include保護您的包含文件,包括liststructs.hlist.h和這兩個文件在calculations.h保護您的包含文件。在頭文件保障通常寫爲:

#ifndef _XXXX_H_ // XXXX = LIST, LISTSTRUCT etc 
#define _XXXX_H_ 

// definitions for file XXXX.h 

#endif /* _XXXX_H_ */ 
0

從你告訴我們,你有calculations.h宣佈extern list *xs;,但沒有提及具有包含liststructs.h該行定義的標識list之前。

liststructs.h需要包含在任何地方,然後才能使用標識list,正如list.h必須包含在您嘗試調用它聲明的任何函數之前。

只要你有include/header guards不用擔心,包括頭文件中多次轉換單元。

+0

我應該在calculations.h的liststructs.h文件?似乎錯了。當我嘗試,我得到錯誤:[Pe513]:類型的值「結構_list *」不能分配給類型「列表中*」和更多的相同錯誤的實體。 – user1106072 2011-12-21 10:46:51

+0

@ user1106072:你不會 「需要」 如果'liststructs.h'被列入前''中main' calculations.h',但我會堅持的'#include'在'calculations.h'。很難說出爲什麼沒有看到實際的文件以及你如何編譯它們而發生錯誤。 – AusCBloke 2011-12-21 10:51:07