繁体   English   中英

C错误解除指向不完整类型的指针

[英]C Error Dereferencing pointer to incomplete type

我制作了这段代码,遵循“C语言中的数据结构基础”一书中给出的函数,我制作了以下代码来实现一个简单的链表,但我似乎没有得到我错在哪里,因为书代码应该是正确的:

#include<stdio.h>
#include<stdlib.h>

typedef struct node *listpointer;

typedef struct        {

int data;
listpointer link;
}  node;

void print(listpointer first)
 {
while  (first)      {
           printf("%d\n",first->data);
           first=first->link;
}
 }

void addAtFront(listpointer *first,int n)
{
listpointer t=*first,temp;
temp=malloc(sizeof(node));
int i=1;
while (i <= n)  {
                t=t->link;
                i++;
}
if(*first)  {
       temp->link=t->link;
        temp->data=90; 
       t->link=temp;
}
else 
{
      *first=temp;
        temp->link=NULL;
}
}       


listpointer createList( )
{
listpointer first,second;
if(first=malloc(sizeof(node)))  {
           first->data=67;
           if(second=malloc(sizeof(node)))  {
         second->data=65;
         first->link=second;
         second->link=NULL;
           }
}
return first;
  }





    main( )
   {
listpointer first=createList( );
addAtFront(&first,2);
print(first);
   }            

你有这个typedef:

typedef struct node *listpointer;

但是你没有定义struct node 你有这样的定义,一个匿名的struct typedef版到node ,但:

typedef struct {
    int data;
    listpointer link;
} node;

可能你的意思是:

typedef struct node {
    int data;
    listpointer link;
} node;

你定义没有标签的结构,

typedef struct node *listpointer;

typedef struct        {

int data;
listpointer link;
}  node;

所以listpointer应该指向的struct node仍然是一个不完整的类型。

你应该给struct一个标签,

typedef struct node { ...

然后listpointer指向一个完整的对象类型。

为什么我收到此错误是因为我没有包含包含结构定义的头文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM