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 wieauf 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.