2011-12-21 1 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.c и в main.c, но потом я объявляю extern list *xs; в calculations.h (определяется в calculations.c) он жалуется: Error[Pe020]: identifier "list" is undefinedLinkedList, структура вопрос включения

Я включил liststructs.h и list.h в таком порядке в calculations.c и main.c и хотите использовать xs в calculations и main.

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

+0

Вы используете 'liststructs.h' в' calculate.h', прежде чем используете идентификатор 'list'? – AusCBloke

ответ

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_ */ 
0

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

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

До тех пор, пока у вас есть include/header guards, не беспокойтесь о включении файлов заголовков несколько раз в блок переводов.

+0

Должен ли я включать файл liststructs.h в calculate.h? Кажется, неправильно. Когда я пытаюсь получить: Ошибка [Pe513]: значение типа "struct _list *" не может быть назначено сущности типа "list *" и больше той же ошибки. – user1106072

+0

@ user1106072: вам не понадобилось бы, если бы 'liststructs.h' был включен до' calculate.h' в 'main', но я бы ввел' # include' в 'calculate.h'. Трудно сказать, почему происходит ошибка, не видя фактических файлов и как их компилировать. – AusCBloke

Смежные вопросы