2015-11-27 5 views
-2

Я новичок в модульное программирование, и я надеюсь, что вы можете помочь мне :) Так вот мой .c .h: item.hОшибка: Неизвестный типа имя

#define L 31 
#define L1 11 
typedef struct{ 
    int priority; 
    char service_type[L]; 
    char client_code[L1]; 
}*Item; 
Item New_client(); 

item.c

#include <stdio.h> 
#include <stdlib.h> 
#include "item.h" 
Item New_client(){ 
    Item new_c=malloc(sizeof new_c); 
    printf("Inserire priorita': "); scanf("%d",&new_c->priority); 
    printf("Inserire servizio: "); scanf("%s",new_c->service_type); 
    printf("Inserire codice cliente: "); scanf("%s",new_c->client_code); 
    return new_c; 
} 

PQ.h

typedef struct Nodo *link; 
struct Nodo{ 
    Item item; 
    link next; 
}; 
void init(link coda); 
int empty_(link coda); 
link insert_(link h,Item client); 

PQ.c

#include <stdio.h> 
#include <stdlib.h> 
#include "PQ.h" 

Так как я включаю PQ.h в PQ.c, я получаю сообщение об ошибке: неизвестное имя типа «Item» из CodeBlocks ... Я не могу понять, почему и что я могу сделать для решения проблемы.

+1

Обратите внимание, что 'malloc (sizeof new_c)' должно быть 'malloc (sizeof * new_c)'. –

+0

Да, ты прав. – Andrea

ответ

1

Вы должны включить item.h в вашем PQ.h:

#include "item.h" 

typedef struct Nodo *link; 
struct Nodo{ 
    Item item; 
    link next; 
}; 
void init(link coda); 
int empty_(link coda); 
link insert_(link h,Item client); 

Update: около ошибок: конфликтных ситуаций для 'Пункта' Этого becouse препроцессор включает item.h дважды. Вы должны обернуть заголовок #ifndef __HEADER_NAME__, #define __HEADER_NAME__, #endif комбинация. Посмотрите, как это можно сделать для item.h:

#ifndef __ITEM_H__ 
#define __ITEM_H__ 

#define L 31 
#define L1 11 
typedef struct{ 
    int priority; 
    char service_type[L]; 
    char client_code[L1]; 
}*Item; 
Item New_client(); 

#endif //__ITEM_H__ 
+0

Если я это сделаю, я получу ошибку: конфликтующие типы для «Item» – Andrea

+0

Спасибо, что вы решили мою проблему! Но зачем мне включать item.h в PQ.h? Элемент typedef является глобальной декларацией, поэтому почему PQ.h не видит его? – Andrea

+0

@Andrea 'typedef' не является глобальной декларацией, ее присваивает название' Item' структуре. В каждом файле заголовка/источника, где вы используете 'Item', вы должны включить соответствующий заголовок. – SergA