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.c
和main.c
的文件中使用此功能,但我在extern list *xs;
中声明了calculations.h
(它在calculations.c
中定义)它抱怨:
Error[Pe020]: identifier "list" is undefined
我已在liststructs.h
和list.h
中按顺序添加了calculations.c
和main.c
,并希望在xs
和{{{{}}中使用calculations
1}}。
此外: 什么是更好的?要在同一个标题中声明结构和列表操作还是将它们分开?
答案 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不要担心在翻译单元中多次包含头文件。