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

Incompatible pointer types struct node to node

我正在为我的课程做实验,我遇到了一些警告问题。 我们得到了一个我们不能改变的结构:

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;
}

ptr->next = head; 我收到一条错误消息

incompatible pointer types assigning type node to struct node

我怎样才能正确地做到这一点?

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

在此 typedef 声明中

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

您声明了两个不同的结构。第一个具有类型 struct Element 和类型别名 Node 并且在其定义中您声明了类型 struct NODE.

即使没有拼写错误并且数据成员的类型为 struct Node * 而不是 struct NODE *,但类型 struct NodeNode 不是同一类型.

你应该像这样声明结构

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

head 声明为 Node *,并且由于 typedef,这等同于 struct Element*.

next 成员声明为 struct NODE *

struct NODE *struct Element * 不同。

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

struct Element *next;