C语言 LinkedList,结构包含问题


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

我在calculations.cmain.c中按顺序包含了liststructs.hlist.h,并希望在calculationsmain中使用xs

也:哪个更好?有结构体和列表操作声明在同一个头或分开它们?

#include保护您的包含文件,在list.h中包含liststructs.h,在calculations.h中包含两个文件。头文件中的保护措施通常写成:

#ifndef _XXXX_H_ // XXXX = LIST, LISTSTRUCT etc
#define _XXXX_H_
// definitions for file XXXX.h
#endif /* _XXXX_H_ */

从您告诉我们的,您在calculations.h中声明了extern list *xs;,但没有提到在定义标识符list的行之前包含了liststructs.h

liststructs.h需要在使用标识符list之前的任何地方包含,就像list.h必须在尝试调用它声明的任何函数之前包含一样。

只要你有include/header保护符,就不用担心在翻译单元中多次包含头文件

相关内容

  • 没有找到相关文章

最新更新