Problem mit Headern und Includes



  • Fröhliche Weihnachten erstma

    Und nun zum Problem 😉

    Ich hab folgende Header bzw. Includes

    functions.h

    ...
    #include math.h
    ...
    class test // für diese Klasse wird math.h benötigt
    ...
    

    math.h

    ...
    #include functions.h
    ...
    class sin // für diese Klasse wird functions.h benötigt
    

    Der Compiler meldet jetzt: Error undefinierte Klasse 'test' verwendet.

    Wie kann ich das Problem lösen?
    In den Headern werden die doch eigentlich nur deklariert da ist doch egal ob die nun definiert sind oder nicht....

    MfG
    Scarabol



  • Hast du die Header mit Präprozessorbefehlen definiert?
    Also

    #ifndef _MATH_H_
    #define _MATH_H_
    
    ...
    
    #endif
    

    und das selbe für functions.h?
    Hast du vielleicht den kompletten Code dazu?
    Vielleicht liegt da der Fehler.



  • Ne, die Klassen müssen definiert werden wenn du sie in einer anderen Datei verwenden möchtest. Ahja und Includeguards benutzen.

    Frohe Wheinachten! :xmas1: :xmas2:



  • Ich verweise immer wieder gerne auf meinen Blog Eintrag, da das Thema doch recht oft vorkommt:

    Definitionen und Deklarationen in C++
    http://www.drakon.ch/?id=&offset=1&mobile=0&show_entry=77



  • Jup hab die Präprozessorbefehle benutzt.

    Der Blog scheint eine Hilfe zu sein, danke. Ich les in gerade...

    Son Mist ich verwende Vererbung, also meine muss ich mein Beispiel von oben noch etwas verfeinern:

    player.h

    ...
    #include star.h
    class player : puclic star
    ...
    

    star.h

    ...
    #include game.h
    ...
    class star // hier wird game benötigt
    ...
    

    game.h

    ...
    #include player.h
    ...
    class game // hier wird player benötigt
    

    Nun sagt der Compiler in player.h ist star nicht definiert.

    MfG
    Scarabol



  • So, wies aussieht machst du eben genau da eine zyklische Abhängigkeit. Zwar über 3 Files, aber kommt auf das gleiche raus. Die Lösung ist aber dieselebe.

    In star.h brauchst du lediglich eine Vorwärtsdeklaration, also kannst du das includen des Headers vermeiden. Und die Implementierung musst du halt in einer star.cpp machen.

    Ein star sollte sowieso nicht von game abhängig sein.. Warum sollte ein start von so etwasem, wie game etwas wissen müssen?



  • Hi,

    habs geschafft dein Blog war ne super Hilfe.

    Bisher dachte ich es gibt nur header und cpp File aber an so eine Deklaration hab ich nicht gedacht.

    Danke
    Scarabol


Anmelden zum Antworten