Несовместимые типы указателей структура узел к узлу - PullRequest
1 голос
/ 24 марта 2020

Я делаю лабораторную работу для моего курса, и у меня возникла проблема с некоторыми предупреждениями. Нам дана структура, которую мы не можем изменить:

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; я получаю сообщение об ошибке

несовместимых типов указателей, присваивающих тип узла для узла структуры

Как я могу сделать это правильно?

Ответы [ 3 ]

1 голос
/ 24 марта 2020

head объявлен как Node *, и из-за typedef это эквивалентно struct Element*.

Член next объявлен как struct NODE *.

struct NODE * - это не то же самое, что struct Element *.

Возможно, вам следует изменить член структуры на

struct Element *next;
0 голосов
/ 24 марта 2020

В этом объявлении 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 Node и Node не являются одинаковыми типами.

Вы должны объявить структуру как

typedef struct Element{
    int value;
    double key1;
    double key2;
    struct Element* next;
    struct Element* sort1;
    struct Element* sort2;
}Node;
0 голосов
/ 24 марта 2020

C чувствителен к регистру, поэтому Node и NODE - это две разные, не связанные вещи. Вы пытаетесь использовать Node в своем коде, но декларация, которую вы не можете изменить, имеет NODE, поэтому они несовместимы. Вы, вероятно, должны изменить свой код, чтобы также использовать NODE.

...