Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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_Typedef_Definition - Fatal编程技术网

C 结构节点到节点的指针类型不兼容

C 结构节点到节点的指针类型不兼容,c,struct,linked-list,typedef,definition,C,Struct,Linked List,Typedef,Definition,我正在为我的课程做一个实验,我对一些警告有意见。 我们得到了一个无法更改的结构: typedef struct Element{ int value; double key1; double key2; struct NODE* next; struct NODE* sort1; struct NODE* sort2; }Node; 这是主要代码: struct Element * randomizer(int A){ /*Functi

我正在为我的课程做一个实验,我对一些警告有意见。 我们得到了一个无法更改的结构:

typedef struct Element{
    int value;
    double key1;
    double key2;
    struct NODE* next;
    struct NODE* sort1;
    struct NODE* sort2;
}Node;
这是主要代码:

struct Element * randomizer(int A){
     /*Function to have "real" random*/

    srand((unsigned int) time(0));

     Node *head;
     Node *ptr;
    int i = 0;

    head = NULL;
    ptr = NULL;



    /*Vlaues beiong intialized*/
    for ( i = 0 ; i <= A; i++){
    ptr = malloc(sizeof(Node));
        ptr->value = rand()%11;
        while (ptr->value == 0 || ptr->value == 10 ){
            ptr->value = rand()%11;
        }
    ptr->key1 =  (rand()%41)+10;

        while (ptr->value == 10.0 || ptr->value == 50.0 ){
              ptr->key1 =  (rand()%41)+10;
        }
    ptr->key2 = (rand()%41)+50;

        while (ptr->value == 50.0 || ptr->value == 90.0 ){
                     ptr->key2 =  (rand()%41)+50;
               }

    ptr->next = head;

    head = ptr;
    }

    ptr->sort1 = NULL;
    ptr->sort2 = NULL;

    return ptr;
}
struct元素*随机化器(int A){
/*函数具有“实”随机性*/
srand((无符号整数)时间(0));
节点*头;
节点*ptr;
int i=0;
head=NULL;
ptr=NULL;
/*弗拉斯·比昂被初始化了*/
对于(i=0;i值=rand()%11;
而(ptr->value==0 | | ptr->value==10){
ptr->value=rand()%11;
}
ptr->key1=(rand()%41)+10;
而(ptr->value==10.0 | | ptr->value==50.0){
ptr->key1=(rand()%41)+10;
}
ptr->key2=(rand()%41)+50;
而(ptr->value==50.0 | | ptr->value==90.0){
ptr->key2=(rand()%41)+50;
}
ptr->next=头部;
水头=ptr;
}
ptr->sort1=NULL;
ptr->sort2=NULL;
返回ptr;
}
ptr->next=head;
我得到一个错误,说

将类型节点分配给结构节点的指针类型不兼容


如何正确执行此操作?

C区分大小写,因此
Node
Node
是两个不同的、不相关的东西。您试图在代码中使用
Node
,但您说不能更改的声明具有
Node
,因此它们不兼容。您可能需要更改代码以同时使用
节点

typedef struct Element{
    int value;
    double key1;
    double key2;
    struct NODE* next;
    struct NODE* sort1;
    struct NODE* sort2;
}Node;
您声明了两个不同的结构。第一个结构具有类型别名节点的类型
struct元素
,并且在其定义中声明了类型
struct节点

即使没有输入错误,并且数据成员的类型为
struct Node*
而不是
struct Node*
,但是类型
struct Node
Node
不是相同的类型

您应该像这样声明结构

typedef struct Element{
    int value;
    double key1;
    double key2;
    struct Element* next;
    struct Element* sort1;
    struct Element* sort2;
}Node;

head
被声明为
节点*
,由于typedef,这相当于
struct元素*

下一个
成员被声明为
struct节点*

struct节点*
struct元素*
不同

您可能应该将结构成员更改为

struct Element *next;

节点
结构元素
的类型定义
下一步
结构节点*
,但是
头是
节点*`。使用sane循环。这是不可读的。我刚刚尝试过,它会导致我的整个代码崩溃。我正在使用节点,因为这就是我声明的结构。好的,非常感谢,这已经奏效了。所以现在我必须给我的教授发电子邮件,因为我不能真正改变这一点。是的,谢谢你,我给我的教授发了信息,他纠正了作业中的错误