2014-10-07 2 views
0

Я пытаюсь создать метод append_node для добавления узла в связанный список, который я создал. Моя структура узла определяется следующим образом:Использование структур в связанном списке

typedef struct Node{ 
    struct Node next = NULL; 
    int id; 
} Node; 

Однако при компиляции описанным ниже методом, я получаю следующее сообщение об ошибке: «Node» имеет ни одного члена с именем «Идентификатор» «Node» не имеет ни одного члена с именем ' next '

void append_node(Node *sent,int val){ 
    Node *other_node = (struct Node *)malloc(1*sizeof(struct Node)); 
    other_node->id = val; 
    Node n = *sent; 
    while (n.next != NULL){ 
     n = n.next; 
    } 
    n.next = other_node; 
} 

Зачем возникает эта ошибка?

EDIT:

Я также следующую ошибку

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token 

на первой строке определения узла

+1

'struct' не может содержать экземпляр одного и того же типа, что и само по себе. – juanchopanza

+1

Вы, вероятно, имели в виду: 'struct Node * next = NULL;' (т. Е. Отсутствует '*'). – isedev

+0

временный 'n' должен быть указателем – sp2danny

ответ

1

В вашем коде есть множество ошибок.
здесь является правильная версия

typedef struct NodeTag 
{ 
    struct NodeTag* next; 
    int id; 
} Node; 

void append_node(Node* sent,int val) 
{ 
    Node* other_node = (Node*)malloc(sizeof(Node)); 
    other_node->id = val; 
    other_node->next = 0; 
    Node* n = sent; 
    while (n->next != 0) 
    { 
     n = n->next; 
    } 
    n->next = other_node; 
} 
+0

Я попытался с помощью этого метода, но когда я называю «Node lr;» 'lr.number = 0;' 'add_node (&lr,2); «Я получаю ошибку seg. Любая идея, что не так? – teaLeef

+0

да, вы не установили рядом с 0 – sp2danny

2

Вы не можете иметь узел определен снова внутри одной и той же структуры. Это будет бесконечная рекурсия.

У вас может быть указатель на тот же тип.

typedef struct Node{ 
    struct Node *next; 
+0

Я изменил это, но у меня все еще есть одна и та же ошибка компиляции ... – teaLeef

+0

ли реализация видит определение узла? какой-то другой заголовок также определяет узел? – sp2danny

+0

Я не уверен, что вы имеете в виду (новый для c). Я определил структуру непосредственно перед основной функцией – teaLeef