Problem mit verketter Liste



  • Ich hab folgende Struktur zum Speichern von Benutzern:

    typedef struct {
      char* name
      ...
      struct user *next;
      struct user *prev;
    }
    

    folgende pointer auf das erste und letzte element:

    user *firstuser=NULL;
    user *lastuser=NULL;
    

    und eine funktion zum einfügen:

    void insert(char *name) {
      user* newuser;
    
      if (( newuser=(user*)malloc(sizeof(use))) != NULL) {
         newuser->name=nick;
         newuser->last=lastuser;
         newuser->next=NULL;
         lastuser->next=newuser;
         lastuser=newuser;
      }
    }
    

    ich bekomme beim kompilieren immer die Meldung:
    warning: assignment from incompatible pointer type
    für die Zeilen mit newuser->last=lastuser und lastuser->next=newuser;

    mir raucht inzwischen total der kopf, obwohl wahrscheinlich ein doofheitsfehler is :-(((



  • Du hast überhaupt keine Typ 'struct user' definiert. Am einfachsten wär es so:

    typedef struct user {
      ...
      struct user *next, *prev;
    } user;
    


  • oh, tipfehler, aber nur in dem post
    im quelltext hab ichs (leider?) richtig, mit "} user;"



  • Das hatte ich mir schon gedacht, entscheidend ist, aber dass das 'user' zwischen 'struct' und '{' gefehlt hat. Diese kombinierte typedef-struct-Deklaration wirkt offenbar verwirrend. Das ganze kann auch getrennt geschrieben werden, vielleicht isses dann klarer:

    struct user {
      ...
      struct user * prev, * next;
    };
    typedef struct user user;
    

    Dass der typedef-Name und der struct-Name gleich sind, stört überhaupt nicht. Die beiden kommen in C nicht in Konflikt.



  • if (( newuser=(user*)malloc(sizeof(use))) != NULL) {
    

    Ist sicherlich nur ein Tippfehler oder?

    Ich hab es mal bei mir probiert und es geht.
    Wie greift Du eigenlich auf die Struktur zu?



  • ja, war auch wieder eine Tipfehler *schäm*
    habs inzwischen gelöst,obwohl ich nicht genau weiss wie

    auf die struktur greif ich zu mit:

    pointer=firstuser;
    firstuser->name="Alfons";
    pointer->next=NULL;

    usw...

    (ich entschuldige mich vorsichtshalber schonmal wieder für Tippfehler, copypaste funzt hier nicht und mit tippen hab ichs heute anscheinend icht so)

    Danke für die schnellen Antworten!!!



  • Wegen der Hinweise auf Schreibfehler: bei solchen Sachen ist der copy-paste Zauber sehr hilfreich, daher fragt man manchmal noch nach, ob es nur ein Tippfehler ist. 😃

    Wie hast Du es gelöst?
    Wenn du Dir da nicht sicher bist, wie und warum, poste doch die Lösung. So vermeidet man weitere Fehler.


Anmelden zum Antworten