LinkedList,struct inclusion问题

时间:2011-12-21 10:24:34

标签: c list struct header linked-list

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的文件中使用此功能,但我在extern list *xs;中声明了calculations.h(它在calculations.c中定义)它抱怨: Error[Pe020]: identifier "list" is undefined

我已在liststructs.hlist.h中按顺序添加了calculations.cmain.c,并希望在xs和{{{{}}中使用calculations 1}}。

此外: 什么是更好的?要在同一个标​​题中声明结构和列表操作还是将它们分开?

2 个答案:

答案 0 :(得分:0)

使用#include安全措施保护您的包含文件,liststructs.h中包含list.h以及calculations.h中的两个文件。头文件中的安全措施通常写为:

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

// definitions for file XXXX.h

#endif /* _XXXX_H_ */

答案 1 :(得分:0)

根据您告诉我们的内容,您在extern list *xs;中声明了calculations.h,但未提及在定义标识符liststructs.h的该行之前添加了list

在您使用标识符liststructs.h之前,

list需要包含在任何位置,就像在尝试调用它声明的任何函数之前必须包含list.h一样。

只要您include/header guards不要担心在翻译单元中多次包含头文件。