Несовместимые типы указателей, присваиваемые 'int *' из 'node *' в связанном списке - PullRequest
0 голосов
/ 26 апреля 2020
struct str_node{
   int data;
   int *next;
}*head;

typedef struct str_node node;

void create_list(int n){
node *boh,*tmp;
int num,i;

head = (node*)malloc(sizeof(node));

if(head == NULL){
    printf("Memory can not be allocated.");
}
else{
    printf("Insert value for node 1: ");
    scanf("%d",&num);
    head->data = num;
    head->next = NULL;
    tmp = head;

    for(i=2;i<=n;i++){
        boh = (node*)malloc(sizeof(node));
        if(boh ==NULL){
            printf("Memory can not be allocated.");
            break;
        }
        else{
            printf("Insert value for node %d",i);
            scanf("%d",&num);
            boh->data = num;
            boh->next = NULL;
            tmp->next = boh;  //<--Incompatible pointer types assigning to 'int *' from 'node *' (aka 'struct str_node *')
            tmp = tmp->next; //<-- Incompatible pointer types assigning to 'node *' (aka 'struct str_node *') from 'int *'
        }
    }
}
}

Код работает хорошо, но я не понимаю этих двух ошибок. Можете ли вы объяснить это мне? Я не думаю, что есть какой-либо int, я работаю только с struct node, я не прав?

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Измените объявление поля next, чтобы оно имело правильный тип. У вас уже есть тег структуры, поэтому вы можете ссылаться на него в определении структуры:

struct str_node{
   int data;
   struct str_node *next;
}*head;
0 голосов
/ 26 апреля 2020

Просто компилятор не может гарантировать, что эти указатели будут одинакового размера на всех машинах. Решение состоит в том, чтобы (a) выполнить назначение = (int*) или (b) отключить предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...