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

我是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;
}
#包括
#包括
#包括“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!