C 错误:未知类型名称
我是模块化编程新手,希望您能帮助我:) 这是我的c.h: 项目.h 项目cC 错误:未知类型名称,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
#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没有看到它?@Andreatypedef
不是一个全局声明,它将名称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__