Deklaration von Funktionen



  • Ich habe noch große Probleme mit der Deklaration von Funktionen.

    Ich habe zum Beispiel in der main.c den Fehler:

    Zeile 45:
    "error: implicit declaration of function 'push' [-Wimplict-function-declaration]

    Zeile 49:
    "error: implicit declaration of function 'isEmpty' [-Wimplict-function-declaration]

    Zeile 51:
    "error: implicit declaration of function 'pop' [-Wimplict-function-declaration]

    Zeile 52:
    "error: implicit declaration of function 'printStackElement' [-Wimplict-function-declaration]

    main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "pointstack.h"
    
    struct point {
        float x;
        float y;
        float z;
    };
    typedef struct point POINT;
    
    POINT readPoint()
    {
        POINT pt;
        printf("Bitte geben Sie die X-Koordinate ein: ");
        scanf(" %f", &pt.x);
        printf("Bitte geben Sie die Y-Koordinate ein: ");
        scanf(" %f", &pt.y);
        printf("Bitte geben Sie die Z-Koordinate ein: ");
        scanf(" %f", &pt.z);
        return pt;
    }
    
    int main()
    {
    char choice;
    POINT currentlyPoint;
    
        while (1)
        {
            printf("'Q' druecken um das Programm zu beenden\n");
            printf("'P' druecken um der Liste einen Punkt hinzuzufuegen\n");
            printf("'A' druecken um alle Punkte in der Liste auszugeben\n\n");
            scanf(" %c", &choice);
    
            switch(choice)
            {
                case 'q':
                case 'Q':
                exit (1);
                break;
                case 'p':
                case 'P':
                currentlyPoint = readPoint();
                push(currentlyPoint);
                break;
                case 'a':
                case 'A':Ich ha
                while (!isEmpty())
                {
                    currentlyPoint = pop();
                    printStackElement (currentlyPoint);
                }
                break;
                default:
                printf(" ACHTUNG ungültige eingabe \n\n");
                break;
            }
        }
        return 0;
    }
    

    Header: pointStack.h

    struct point {
        float x;
        float y;
        float z;
    };
    
    typedef struct point POINT;
    
    void push(POINT);                //erhält POINT, speichert ihn in in STACK_POINT
    POINT pop();                     //gewinnt letzten punkt aus STACK_POINT, löscht letztes Kettenglied
    int isEmpty();                  //True wenn gesamte STACK_POINT lehr, False wenn STACK_POINT benützt
    void printStackElement();   //gibt alle Punkte in STACK_POINT aus ohne sie zu verändern
    

    pointStack.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "pointstack.h"
    
    struct stackPoint {
        POINT Punkt;
        struct stackPoint *next;
    };
    typedef struct stackPoint STACK_POINT;
    typedef STACK_POINT *STACK_POINT_PTR;
    STACK_POINT *stackTop = NULL;
    
    // erhält POINT, speichert ihn in in STACK_POINT
    // next zeigt auf jetztigen stackTop
    // fals kein neues element generiert werden kann fehlermeldung
    // stackTop wird auf neustes Element gesetzt
    void push(POINT point){
        STACK_POINT_PTR cachePtr = NULL;
        cachePtr = (STACK_POINT_PTR)malloc(sizeof(STACK_POINT));
        if (cachePtr == NULL){
            printf(" FEHLER nicht genuegend RAM\n");
            exit (1);
        }
        cachePtr->next = stackTop;
        stackTop = cachePtr;
        stackTop->Punkt = point;
        return;
    }
    
    //True wenn gesamte STACK_POINT lehr, False wenn STACK_POINT benützt
    int isEmpty(){
        return stackTop==NULL;
    }
    
    //sichert POINT, legt neues stacktop fest, löst sturktur auf, gibt point wieder
    POINT pop (){
        if (isEmpty() != 1){
        	STACK_POINT *cachePtr = NULL;
        	POINT cachePoint;
        	cachePtr = stackTop;
        	cachePoint = stackTop->Punkt;
        	stackTop = stackTop->next;
        	free (cachePtr);
        	return (cachePoint);
        }
        printf("FEHLER Keine Elemente im Stack");
        exit (2);
    }
    
    //gibt alle punkte im Stack aus
    void printStackElement (POINT aPoint){
    
        printf(" x = %f", aPoint.x);
        printf(" y = %f", aPoint.y);
        printf(" z = %f\n", aPoint.z);
        return;
    }
    

    Programmbeschreibung:

    Das Programm soll mir beliebig viele Punkte einlesen und speichern. Die Punkte sollen in umgekehrter Reihenfolge ausgegeben werden. Der Benutzer kann nach jeder Eingabe entscheiden, ob er noch einen Punkt eingeben möchte
    (Eingabe ’p’), oder ob die gespeicherten Punkte ausgegeben werden sollen (Eingabe ’q’. Während der Ausgabe soll der Stack Punkt für Punkt geleert werden, so dass er zuletzt wieder leer ist.
    Die Liste soll ausschließlich durch die Stack-Funktionen push() und pop() verwaltet werden.



  • pointstack.h oder
    pointStack.h?



  • pointstack.h ist richtig. pointStack.h war falsch



  • Also alles mit kleinem 's', pointstack.c und pointstack.h.

    Und so heissen auch Deine Dateien? Und die Version mit großem 'S' existieren auch nicht?

    Die Fehlermeldungen deuten auf irgendein Kuddelmuddel hin(*). Deswegen die "blöden Fragen".

    (*): Prinzipiell müsste eher eine "redefinition of struct point" Fehlermeldung kommen.



  • pointStack.c habe ich jetzt auch mit einem kleinen s versehen. Jetzt funktioneirt es, danke



  • Und der Compiler meldet auch, wenn er eine Datei nicht findet.

    Fehler muss man von oben nach unten beseitigen, da viele Fehler oft Folgefehler sind.


Anmelden zum Antworten