Turbo c: Body has already been defined for function



  • Die oben genannte Fehlermelde kommt beim compilieren.

    Ich hab externe .h dateien mit functionen.

    Ich hab ein Hauptprogramm, das greift auf eine menue.h zu
    aus dem menue.h (Hauptmenue) kommt dann tmenue.h (taschenrechner menue).
    Aus dem Tmenue.h greif ich auf eine tfunk.h (Funktionen des Taschenrechners [addieren, subtrahieren, etc]).

    So würde alles laufen, jetzt will ich aber bei tfunk.h die tmenue.h includen, da kommt, dass er sie nicht includen kann. OK, dann hab ich ein Kommentar drauß gemacht.

    Der Fehler kommt, wenn ich im tmenue.h die datei menue.h include.

    also ich denke der fehler hängt damit zusammen, dass ich im hauptmenue die menue.h include und dann wieder im tmenue.h, welches ja aus der menue.h heraus aufgerufen wird.

    Aber warum kommt der Fehler dann bei tfunk.h ?

    Hoffe ich konnte mein Anliegen nahebringen, bei Fragen, bin ich gern zu sprechen. Kann auch mein Programm wenn jemand zeit hat mal vorbeischicken, ist nicht groß.

    DANKE



  • Pass bei Includierungen auf gleichem Niveau besonders auf, dass da nichts endloses zustande kommt.
    Aber!
    Die Fehlermeldung bezieht sich auf einen Body! Ein Funktionskörper - eine Definition existiert bereits!
    Kann es sein, dass Du im Header was stehen hast wie
    void foo(void) {}
    ?
    Dass also nicht nur reine Deklarationen drin sind?

    EDIT: Ich meine, mich erinnern zu können, dass die Fehlermeldung auch gerne zustande kommt, wenn was mit der Anzahl offener und geschlossener Klammern nicht stimmt. Check das auch mal.



  • Bin ganz frisch seid diesem Schuljahr in c eingestiegen.

    ich hatte alles auf void ... (void) {}
    habs aber auf int ... (void) {return 0;} geändert

    Ausschnitte aus den Quellcodes:

    rechner.cpp:
    #include menue.h
    dann bin ich im menue:
    #include tmenue.h
    #include wmneue.h etc...
    dann bin ich im tmenue:
    #include tfunk.h
    #include menue.h

    und dann bringt er mir den Fehler

    EDIT Klammer sind eigentlich alle ok, da wenn ich im tmenue #include menue.h als Kommentar setzte funktioniert alles, aber ich brauch die Funktion aus dem menue.h wieder.



  • In den Headerdateien solltest Du keine Definitionen der Funktionskörper vornehmen.
    Dort gehören nur die Funktionsköpfe=Header=Prototypen=Deklarationen rein.

    z.B.
    void leere_funktion(void);

    und in die C-Datei gehören die Funktionsdefinitionen/Bodys/Rümpfe rein:

    void leere_funktion(void)
    {
    }

    Sieh eine Headerdatei als eine Art Inhaltsverzeichnis an.
    Im Zusammenspiel mit Klassen ergeben sich da mehr Möglichkeiten - da können Funktionen (heissen dann Methoden) auch direkt in einer Klasse in der Headerdatei implementiert werden. Aber in C (so, wie Du es jetzt brauchst) macht es keinen Sinn Definitionen im Header vorzunehmen.

    Also, check erstmal durch, ob irgendwo Definitionen in den Headern sind (...ich glaube es eigentlich nicht, ich vermute eher wirklich ein Klammerproblem)


Log in to reply