C 错误:未知类型名称

C 错误:未知类型名称,c,C,我是模块化编程新手,希望您能帮助我:) 这是我的c.h: 项目.h 项目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("In

我是模块化编程新手,希望您能帮助我:) 这是我的c.h: 项目.h

项目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.c

#包括
#包括
#包括“PQ.h”

因此,当我在PQ.c中包含PQ.h时,我得到了一个错误:来自代码块的未知类型名“Item”。。。我不知道为什么,我能做些什么来解决这个问题

您应该在您的
PQ.h
中包含
item.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);
更新:关于错误:“项”的类型冲突 这是因为预处理器包括
item.h
两次。您应该使用
#ifndef#header(u NAME)
#define(u header)header(u NAME)
#endif
组合来包装标题。查看如何对项目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__

还要注意的是
malloc(sizeof new_c)
应该是
malloc(sizeof*new_c)
。是的,你说得对,谢谢。如果我这样做,我会得到错误:“Item”的类型冲突谢谢你解决了我的问题!但为什么我需要在PQ.h中包含项.h?typedef项是一个全局声明,那么为什么PQ.h没有看到它?@Andrea
typedef
不是一个全局声明,它将名称
Item
分配给结构。在使用
项的每个头文件/源文件中
都应该包含相应的头文件。好的,明白了。再次感谢塞尔加。
#include <stdio.h>
#include <stdlib.h>
#include "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);
#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__