Typedef Struct und malloc()
-
Guten Morgen,
ich bin am Rande der Verzweiflung und hoffe hier kann mir jemand helfen diese zu beseitigen.Für einen Labortermin soll ich eine doppelt verkette Liste programmieren. An sich ja kein Problem, jedoch wurde mir von meinem Prof die Datenstrucktur, in die ich die Liste speichern soll, vorgegeben. Diese schaut folgendermaßen aus:
/* Datenstruktur der Daten eines Listenelements */ typedef struct person { char * n_name; char * v_name; int nummer; } person_t; /* Datenstruktur eines Listenelements */ typedef struct eintrag { person_t person; struct eintrag * p_prev; struct eintrag * p_next; } eintrag_t; /* Datenstruktur mit Informationen ueber die Liste */ typedef struct { struct eintrag * p_head; struct eintrag * p_tail; struct eintrag * p_search; int length; } telefonbuch_t;
Soweit so gut, die Allokation des Telefonbuchs und des Eintrages bekomme ich auch ohne Probleme hin.
book = ( telefonbuch_t *) malloc(sizeof(telefonbuch_t)); book->p_head = ( eintrag_t *) malloc(sizeof(eintrag_t));
Sobald ich jedoch versuche der person_t Strucktur Speicher zu zuweisen, erhalte ich jedes Mal eine Fehlermeldung, hierbei habe ich auch schon mehrere Versuche unternommen, jedoch alle ohne Erfolg. Hinzu kommen nicht schlüssige Fehlermeldungen (Das bin ich zwar von C gewöhnt aber in diesem Fall ist sind diese sehr strange).
zB. :
book->p_head->person = ( person_t *) malloc(sizeof(person_t)); --> error C2440: 'Typumwandlung': person_t *' kann nicht in 'person' konvertiert werden
Ich war sogar schon so weit das eine Fehlermeldung des Typs :
error C2440: 'Typumwandlung': person' kann nicht in 'person' konvertiert werden
erhalten habe.
Wie ich das hinbekommen habe, kann ich aber leider nicht mehr eindeutig sagen, da ich echt schon viel versucht habe.
Ich hoffe hier kann mir jemand helfen und bedanke mich schonmal im voraus für die Mühe.
Liebe Grüße
-
du besorgst dir den speicher (so wie man das macht) bereits hier
book->p_head = ( eintrag_t *) malloc(sizeof(eintrag_t));
zugrefen kannst dann via
book->p_head.person.nummer = 0x1010; book->p_head.person.n_name = "noob"; book->p_head.person.v_name = "lolo";
ein bischen schöner könnte es so sein
person p = { .nummer = 0x1010 ,.n_name = "noob" ,.v_name = "lolo" }; book->p_head.person = p;
lg lolo
-
ups
person_t p = { //statt person p = {
-
Oh Gott, und mit so etwas trivialen hab ich nun mehrere Stunden Zeit vergeudet.
AHHHHH....Aber danke für die schnelle Hilfe
Wenn ich mir das nochmal anschaue, ist das sogar logisch, da ja der person_t schon im eintrag_t ist... -.-