LinkedList, проблема включения структуры - PullRequest
0 голосов
/ 21 декабря 2011
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 и main.

Также:Что лучше?Чтобы структуры и списки операций объявлялись в одном и том же заголовке или разделяли их?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

Из того, что вы нам сказали, вы объявили extern list *xs; в calculations.h, но не упомянули о включении liststructs.h перед той строкой, которая определяет идентификатор list.

liststructs.h необходимо включить в любом месте, прежде чем использовать идентификатор list, точно так же, как list.h необходимо включить перед попыткой вызова любой из функций, которые он объявляет.

КакПока у вас есть include / header guard не беспокойтесь о многократном включении файлов заголовков в модуль перевода.

0 голосов
/ 21 декабря 2011

Защитите ваши включаемые файлы с помощью #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_ */
...