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.