取消引用指向不完整类型的指针

时间:2014-11-16 06:23:43

标签: 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 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:这个程序只适合我自己学习。

1 个答案:

答案 0 :(得分:0)

如果标题中的唯一项目是typedef struct Rec *node;,那就麻烦了。 您尚未在任何地方定义struct Recstruct List。你说他们存在,但就是这样。这使得它们成为不完整的类型,并且您不能取消引用不完整的结构类型,因为编译器不知道哪些成员处于不完整的结构类型中。

您的List参数是伪装的struct Rec *,如果您未在任何地方定义struct Rec,则会遇到问题。您的struct Listing包含struct List *,它也是指向其他类型的指针。请注意,在您的代码中,List类型与struct List类型无关。请注意nodeList都是struct Rec *类型的别名。

sum()中的代码引用head结构指针的tailList成员,因此struct Rec需要包含这些名称。

通常,最好保持结构标签和typedef名称密切相关。那就是:

typedef struct Node Node;

但不是:

typedef struct Angel Elephant;

此外,普遍的共识是最好不要在typedef中嵌入指针。也就是说,可以在上面写typedef,但不能使用:

typedef struct Fish *Fish;

例如,请参阅Is it a good idea to typedef pointers?

相关问题