我是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 sum(List L)
{
if(L->items == NULL)
{
return NULL;
}
return (L->head + sum(L->tail));
}
int main(void)
{
return 1;
}
我说错了
在if(L->items == NULL)
取消引用指向不完整类型的指针。
我知道它在我的结构中,但我不知道如何解决它。我尝试过试错,但我想了解我的错误是什么以及在哪里。
PS:这个程序只适合我自己学习。
答案 0 :(得分:0)
如果标题中的唯一项目是typedef struct Rec *node;
,那就麻烦了。
您尚未在任何地方定义struct Rec
或struct List
。你说他们存在,但就是这样。这使得它们成为不完整的类型,并且您不能取消引用不完整的结构类型,因为编译器不知道哪些成员处于不完整的结构类型中。
您的List
参数是伪装的struct Rec *
,如果您未在任何地方定义struct Rec
,则会遇到问题。您的struct Listing
包含struct List *
,它也是指向其他类型的指针。请注意,在您的代码中,List
类型与struct List
类型无关。请注意node
和List
都是struct Rec *
类型的别名。
sum()
中的代码引用head
结构指针的tail
和List
成员,因此struct Rec
需要包含这些名称。
通常,最好保持结构标签和typedef
名称密切相关。那就是:
typedef struct Node Node;
但不是:
typedef struct Angel Elephant;
此外,普遍的共识是最好不要在typedef
中嵌入指针。也就是说,可以在上面写typedef
,但不能使用:
typedef struct Fish *Fish;