Problem mit liste und structs
-
Probiers mal so:
typedef struct liste { struct liste *next; struct liste *last; struct line *data; } listType; typedef struct line { char *id; int x1; int y1; int x2; int y2; } lineType; //Global definiert struct liste *start=NULL; //Anfang Liste struct liste *end=NULL; //Ende Liste struct liste *temp=NULL; //Hilfszeiger void insert_list(struct line *data, int shape) { if(start == NULL) { if((start = (struct liste *) malloc(sizeof(listType))) == NULL) { printf("Kein Speicherplatz vorhanden für anfang\n"); return; } // Daten in das erste Element schreiben start->next = NULL; start->last = NULL; start->data = (struct line *) malloc(sizeof(lineType)); start->data->x1=10; //--> Hier liegt mein Problem //Fehlermeldung:Auf der linken Seite von 'x' wird //eine undefinierte struct/union 'line' bestimmt } .... }
mfg
-
ehmkey schrieb:
ok das hab ich mal geändert, aber hab die Probs noch immer
vielleicht liegt's daran, dass line erst unter liste definiert wird?
probier mal so:struct line; typedef struct liste { struct liste *next; struct liste *last; struct line *data; } liste; typedef struct line { char *id; int x1; int y1; int x2; int y2; } line; ...
^^oder tausch die structs, so dass zuerst 'line' definiert wird, dann 'liste'
-
hat leider beides nichts geholfen, jetzt sagt er bei
start->data->x1=10; --> Der linke Teil von '->x' muss auf eine Struktur/Union zeigen
Was mir fast noch wichtiger ist, habt ihr ne idee wie ich dann mehrere verschiedene structs in einer Liste speichern kann?!
-
also mein compiler übersetz dein programm ohne probleme. Ich benutze den gcc. Vlt liegt der Fehler auch woanders.
MFG
-
nimm mal die lösung vom ronny die ging bei mir ohne probleme
-
ich habs mit gcc auch versucht und bei mir gehts net zum compilieren, komisch :S
-
Poste nochmal deinen kompletten Quelltext und sag womit du das Ding kompilierst.
-
ehmkey schrieb:
Was mir fast noch wichtiger ist, habt ihr ne idee wie ich dann mehrere verschiedene structs in einer Liste speichern kann?!
na, dazu hat doch jede instanz deiner struct pointer auf andere instanzen. wenn du ein neues objekt erzeugst, kannst du z.b. den next-pointer eines vorhandenen objects darauf zeigen lassen, der next-pointer von deiner neuen struct zeigt dann darauf, worauf der next-pointer der anderen struct vorher gezeigt hat, usw. damit hast du die neue struct in die liste eingefügt.
schau mal hier: http://www.cprogramming.com/tutorial/lesson15.html
-
typedef struct _linie_ { char *id; int x1; int y1; int x2; int y2; } line; typedef struct _liste_ { struct liste *next; struct liste *last; //struct line *lines; //struct rect *rects; //struct circle *circles; //struct text *texts; struct line *data; } liste; liste *start=NULL; //Anfang Liste liste *end=NULL; //Ende Liste liste *temp=NULL; //Hilfszeiger void insert_list(line *data, int shape) //wird so aufgerufen insert(&lin,1) { liste *pointerEnd; line *test; if(start == NULL) { /* Wir reservieren Speicherplatz für unsere Struktur * für das erste Element der Liste*/ if((start = (struct liste *) malloc(sizeof(liste))) == NULL) { printf("Kein Speicherplatz vorhanden für anfang\n"); return; } // Daten in das erste Element schreiben start->next = NULL; start->last = NULL; start->data = (line *) malloc(sizeof(line)); // start->data->id = malloc (sizeof(char)); ->geht nicht start->data=(struct line*)&data; // printf("Es geht die ID auszugeben : %s",start->data->id) ; } else { temp = start; while (temp->next != NULL) { temp = temp->next; } if((temp->next =malloc(sizeof(liste))) == NULL) { printf("Kein Speicherplatz für das letzte Element\n"); return; } temp=temp->next; if(shape==1) //Linie { temp->data = malloc(sizeof(line)); temp->data = data; //temp->data->id = data->id; temp->next = NULL; } }
-
Das hatten wir eigentlich alles in der vorigen Posts schon korrigiert. Die Fehler sind nach wie vor in deinem Programm.
Hier der korrigierte Code:
typedef struct line { char *id; int x1; int y1; int x2; int y2; } lineTyp; typedef struct liste { struct liste *next; struct liste *last; //struct line *lines; //struct rect *rects; //struct circle *circles; //struct text *texts; struct line *data; } listenTyp; struct liste *start=NULL; //Anfang Liste struct liste *end=NULL; //Ende Liste struct liste *temp=NULL; //Hilfszeiger void insert_list(struct line *data, int shape) //wird so aufgerufen insert(&lin,1) { liste *pointerEnd; struct line *test; if(start == NULL) { /* Wir reservieren Speicherplatz für unsere Struktur * für das erste Element der Liste*/ if((start = (struct liste *) malloc(sizeof(listenTyp))) == NULL) { printf("Kein Speicherplatz vorhanden für anfang\n"); return; } // Daten in das erste Element schreiben start->next = NULL; start->last = NULL; start->data = (struct line *) malloc(sizeof(lineTyp)); // start->data->id = malloc (sizeof(char)); ->geht nicht start->data=(struct line *)&data; // printf("Es geht die ID auszugeben : %s",start->data->id) ; } else { temp = start; while (temp->next != NULL) { temp = temp->next; } if((temp->next = (struct liste *)malloc(sizeof(listenTyp))) == NULL) { printf("Kein Speicherplatz für das letzte Element\n"); return; } temp=temp->next; if(shape==1) //Linie { temp->data = (struct line *) malloc(sizeof(lineTyp)); temp->data = data; //temp->data->id = data->id; temp->next = NULL; } } }