2016-04-02 8 views
0

Ich versuche, einen Brief mit Datenteil zu vergleichen, um ihn in alphabetischer Reihenfolge in verknüpfte Liste einzufügen. Was ist daran falsch?Verknüpfte Liste und Zeiger auf unvollständige Klassenart

typedef struct{ 
    char data; 
    struct list_node *next; 
}list_node; 

typedef struct{ 
    list_node *head; 
}list; 

Ich versuche folgendes zu tun:

void input_char(list *my_list, char x) 
{ 
    list_node *node = (list_node*)calloc(1, sizeof(list_node)); 
    list_node *tmp = my_list->head; 
    node->data = x; 

    if (tmp == NULL) 
     my_list->head = tmp; 
    else if (tmp->next == NULL) 
    { 
     if (x < tmp->data) 
     { 
      node->next = tmp; 
      my_list->head = node; 
     } 
     else 
      tmp->next = node; 

     tmp = tmp->next; 
    } 
    else 
    { 
     if (x < tmp->next->data) 
    // This following line says "Error, Pointer to incomplete type is not allowed. 
     { 
      node->next = tmp->next; 
      tmp->next = node; 
     } 
     tmp = tmp->next; 
    } 
} 
+0

C unterstützt keine Klassen. Wenn Sie als C++ kompilieren, ändern Sie das Tag. Siehe [fragen]. Welche Fehlermeldung erhalten Sie? Woher? – Olaf

+0

@ Snađошƒаӽ: In C++ ist ein 'struct' ein Klassentyp. Hast du den Titel gelesen ("Verknüpfte Liste und Zeiger auf unvollständige ** Klasse ** Typ")? – Olaf

+1

Ein Typ. Alias ​​(wie mit dem Schlüsselwort 'typedef} eingeführt) ist nicht dasselbe wie ein Struktur-Tag (der Name einer Struktur). So funktioniert 'struct some_typedef_name * foobar' nicht, solange das Struktur-Tag nicht den gleichen Namen wie der Typ-Alias ​​hat. –

Antwort

3

ändern

typedef struct{ 
    char data; 
    struct list_node *next; 
}list_node; 

zu

typedef struct list_node{ 
    char data; 
    struct list_node *next; 
}list_node; 

Ihr Compiler nicht weiß, was struct list_node ist, so du musst es erklären.

+0

Es wurde das Problem behoben, Danke. Ich werde es als Antwort so schnell wie möglich akzeptieren. – Dannz