Вставка узла в связанный список C: ожидаемый node_t *, но аргумент имеет тип node_t - PullRequest
1 голос
/ 03 октября 2019

Я не могу вставить новый список в мою структуру. Может кто-нибудь, пожалуйста, помогите мне? Спасибо! :) Это мой код и ошибка:

Ошибка после компиляции:

27: 9: ошибка: несовместимые типы при назначении типу 'node_t {aka struct _node_t}' из типа 'node_t *{aka struct _node_t *} '

Код:

typedef struct _node_t {
    double d;
    struct _node_t *next;
    } node_t;

void print_list (node_t *l) {
    node_t *curr = l;
    printf("[");

    while (curr != NULL) {
        if (l != curr) printf (",");
        printf("%4.1f",curr->d);
        curr = curr->next;
    }

    printf("]\n");
}

node_t *insert (node_t *l, double d) {
    node_t *new_node;
    new_node = (node_t *) malloc (sizeof(node_t));

    if (new_node == NULL) {
        printf("insert: error: no space left\n");
        return l;
    }

    new_node->d = d;
    new_node->next = l;
    return new_node;
}

int main (void) 
{   
    node_t n1;

    print_list(&n1);
    n1=insert(n1,10);
}

1 Ответ

1 голос
/ 03 октября 2019

Функция insert имеет тип возвращаемого значения node_t *, который является типом указателя.

Однако в main вы пытаетесь присвоить возвращаемый указатель объекту без указателя типа.

node_t n1;
//...
n1=insert(n1,10);

Более того, объект n1 не инициализирован.

Вам нужно написать в main

node_t *n1 = NULL;
print_list( n1 );
n1=insert( n1, 10 );

И, кажется, лучше поменять два последних операторав основном как

node_t *n1 = NULL;
n1=insert( n1, 10 );
print_list( n1 );
...