C 删除指向不完整类型的指针
我是C编程新手 这是我的头文件C 删除指向不完整类型的指针,c,C,我是C编程新手 这是我的头文件 typedef struct Rec *node; 这在我的c文件中 #include <stdio.h> #include <stdlib.h> #include "header.h" typedef struct Rec *List; typedef struct Listing{ node *items; int numelems; struct List *next; }Listing; int s
typedef struct Rec *node;
这在我的c文件中
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
typedef struct Rec *List;
typedef struct Listing{
node *items;
int numelems;
struct List *next;
}Listing;
int sum(List L)
{
if(L->items == NULL)
{
return NULL;
}
return (L->head + sum(L->tail));
}
int main(void)
{
return 1;
}
#包括
#包括
#包括“header.h”
类型定义结构记录*列表;
typedef结构列表{
节点*项目;
国际货币基金组织;
结构列表*下一步;
}上市;
整数和(列表L)
{
如果(L->items==NULL)
{
返回NULL;
}
收益率(L->head+sum(L->tail));
}
内部主(空)
{
返回1;
}
我得到了这个错误,它说
如果(L->items==NULL),则在处取消对不完整类型的引用指针。
我知道它在我的结构中,但我不知道如何修复它。我尝试了尝试和错误,但我想了解我的错误是什么,在哪里
PS:此程序仅供我学习。如果标题中的唯一项目是typedef struct Rec*节点代码>,这就是问题所在。
您没有在任何地方定义struct Rec
或struct List
。你说过它们存在,但仅此而已。这使得它们是不完整的类型,并且不能取消对不完整结构类型的引用,因为编译器不知道不完整结构类型中有哪些成员
您的列表
参数是一个伪装的struct Rec*
,如果您没有在任何地方定义struct Rec
,则会出现问题。您的结构列表
包含一个结构列表*
,它也是指向不同类型的指针。请注意,在代码中,列表
类型与结构列表
类型无关。请注意,node
和List
都是类型struct Rec*
的别名
sum()
中的代码引用了List
结构指针的head
和tail
成员,因此struct Rec
需要包含这些名称
一般来说,最好保持结构标记和typedef
名称密切相关。即:
typedef struct Node Node;
但不是:
typedef struct Angel Elephant;
此外,普遍的共识是最好不要在typedef
中嵌入指针。也就是说,可以编写上面的typedef
s,但不能使用:
typedef struct Fish *Fish;
例如,请参见header.h中的内容?它是否定义了struct Rec
或struct List
?如果没有,那就是问题所在-您的列表
参数是一个struct Rec*
,如果您没有在任何地方定义struct Rec
,您就有问题了。您的结构列表
包含一个结构列表*
,它也是指向不同类型的指针。请注意,在代码中,列表
类型与结构列表
类型无关。typedef struct Rec*节点代码>-不,不,不,请不要!不要将指针隐藏在(名称错误的不同)typedef
s!