Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 下一个结构项,不完整类型_C_Struct_Linked List_Field - Fatal编程技术网

C 下一个结构项,不完整类型

C 下一个结构项,不完整类型,c,struct,linked-list,field,C,Struct,Linked List,Field,给出“字段下一个有不完整的类型错误” 此结构有什么问题?问题是,当编译器到达这一行时: struct node{ struct node next; int id; } struct节点{ 结构节点下一步;/* 您需要对节点进行前向声明,因为编译器在处理其定义时还不知道node 您可能想存储指针,而不是节点对象本身 试试这个: struct node{ struct node next; /* << this line */ 创建自引用数

给出“字段下一个有不完整的类型错误”


此结构有什么问题?

问题是,当编译器到达这一行时:

struct node{  
    struct node next;  
    int id;  
}
struct节点{
结构节点下一步;/*
  • 您需要对节点进行前向声明,因为编译器在处理其定义时还不知道
    node
  • 您可能想存储指针,而不是节点对象本身
  • 试试这个:

    struct node{  
        struct node next;  /* << this line */
    

    创建自引用数据类型时,需要使用指针来解决循环性问题:

    struct node;
    
    struct node{  
        struct node *next;  
        int id;  
    };
    
    …应该可以工作,但使用时请注意正确分配内存

    为什么一个指针?考虑这个问题:一个代码>结构> /CODE定义的点是这样的,编译器可以计算出分配多少内存以及当你说“代码>节点.ID/CODE >时要访问哪些部分。如果你的代码>节点< /COD>结构包含另一个<代码>节点< /Calp>Stutt,编译器应该为给定的<代码>节点分配多少内存。


    使用指针可以避免这种情况,因为编译器知道为指针分配多少空间。

    不完整类型的某些用法格式不正确,例如当您试图声明不完整类型的对象时。但是,您可以声明指向不完整类型的指针(例如).在这种情况下,这正是这里需要的:

    struct node;
    
    struct node {  
        struct node * next;  
        int id;  
    }
    
    如果一个结构可以包含它自己类型的另一个实例,那么它的大小将是无限的

    这就是为什么它只能包含指向自己类型的指针


    此外,在代码中的这一点上,结构的大小是未知的,因此编译器无法知道为它保留多少空间。

    为了工作,您应该编写:

    struct node{  
        struct node *next;  
        int id;  
    };
    

    不需要转发声明,因为结构的声明充当其自身的转发声明。问题完全在于他试图将结构放在其内部,并且应该使用指针。以下划线开头的标识符保留给实现awoodland:仅下划线+大写字母或双下划线。实际实际上,编译器已经知道了这一点。真正的问题是由于自引用性,
    struct
    将具有无限大小。解决方案是使用指针(
    struct node*next
    );-)
    typedef struct _node{
      struct _node* next;
      int           id;
    }node;