Anzeige:
Ergebnis 1 bis 6 von 6

Thema: struct "undeclared (first use in this function)"

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20

    Question struct "undeclared (first use in this function)"

    Hallo,

    ich muss bis Donnerstag einen Stack implementieren für die Uni und ich habe ein Problem, welches ich mir nicht erklären kann:
    Ich habe 2 structs:
    Code:
    struct stack_element{
    	/* Wert des Elements */
    	long value;
    	/* Zeiger auf (naechstes oder vorheriges) Element im Stack */
    	struct stack_element *element;
    };
    
    /*
     * Das struct zur Verwaltung des Stacks könnte zum Beispiel wie folgt aussehen:
     */
    struct stack_data{
    	/* Zeiger auf das unterste/erste Element im Stack */
    	struct stack_element *first;
    	/* Zeiger auf das oberste Element im Stack */
    	struct stack_element *top;
    	/* Anzahl der Elemente im Stack */
    	long count;
    };
    zum Testen ist meine Main-Methode erstmal nur folgendes:
    Code:
    int main() {
    	struct stack_data * Stack;
    	//long Zahl;
    	// (a):
    	stack_initialize(&Stack);
    	return 0;
    }
    Die Funktion sieht wie folgt aus:
    Code:
    int stack_initialize (struct stack_data ** Stack) {
    	//Speicherplatz allockieren
    	struct stack_data *tmp_d = /*(stack_data *)*/calloc(1, sizeof stack_data);
    	if (tmp_d == NULL) {
    		return -1;
    	} else {
    		Stack = &tmp_d;
    		return 0;
    	}
    };
    Und die mir völlig unerklärliche Compilermeldung ist:
    Code:
    chris@Terra-Lap:Blatt6$ gcc stack_2.c
    stack_2.c: In function ‘stack_initialize’:
    stack_2.c:109: error: ‘stack_data’ undeclared (first use in this function)
    stack_2.c:109: error: (Each undeclared identifier is reported only once
    stack_2.c:109: error: for each function it appears in.)
    Warum nun ist "stack_data" undeclared? Das ist doch das definierte struct.

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.09.2005
    Beiträge
    66
    Code:
    struct stack_data *tmp_d = /*(stack_data *)*/calloc(1, sizeof stack_data);
    Hier müsste es sizeof(struct stack_data) heißen.

  3. #3
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    und hier

    Zitat Zitat von crocodilechris Beitrag anzeigen
    Stack = &tmp_d;
    muß es stattdessen

    Code:
     *Stack = tmp_d;
    heißen.

    Liebe Grüße,
    Axel

  4. #4
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    Zitat Zitat von Yonibear Beitrag anzeigen
    Code:
    struct stack_data *tmp_d = /*(stack_data *)*/calloc(1, sizeof stack_data);
    Hier müsste es sizeof(struct stack_data) heißen.
    Ah da lag der Fehler, vielen Dank!
    Find das nicht ganz intuitiv, dass man bei nem Verbund immer wieder angeben muss, dass es sich um einen Verbund handelt.

    @sommerfee:
    THX, hatte ich beim Neuschreiben verdreht.

    Jetzt hab ich nurnoch nen Fehler beim pop, dass sieht bisher noch so aus, schmeißt aber nen "segmentation fault":
    Code:
    int stack_pop(struct stack_data * Stack, long * Wert) {
    	*Wert = Stack->top->value;
    	--(Stack->count);
    	*Stack->top = Stack->first[Stack->count];
    	//free(Stack->top);
    	return 0;
    };
    Hab den Fehler schon auf die Zeile mit dem Stack->top lokalisiert.
    Und wenn ich das free(Stack->top) versuche, schaltet sich "glibc" ein und gibt mir ne Memory map ...

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von crocodilechris Beitrag anzeigen
    Hab den Fehler schon auf die Zeile mit dem Stack->top lokalisiert.
    Dann ist entweder Stack, Stack->top oder Wert kein gültiger Pointer.
    Setzt deine stack_initialize auch alle Werte auf sinnvolle Defaults? Z.B NULL für die enthaltenen Pointer?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    das wars gewesen, stack->first war nicht gesetzt, hab vergessen die Aktualisierung zu posten.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •