[SOLVED] Headerdateien inkludieren



  • Wenn ich allerdings, die Game.h nur in die Texture.cpp inkludieren, dann funktioniert alles einwandfrei. Ich brauche ja auch den Renderer nur in der .cpp der Texture Klasse, da ich ja nichts deklarieren muss. Das so zu machen ist halt nur nicht schön und richtig oder?



  • mgaeckler schrieb:

    Forwarddeclaration könnte Dein Problem lösen.

    Das werde ich gleich mal versuchen. 🙂



  • Nur mal so als Tipp: Die Fehlermeldungen sind ohne zugehörigen Code relativ wertlos. Da du nicht deinen ganzen Code hier posten kannst und willst, gehst du am besten so vor: Du löschst aus deinem Code solange überflüssigen Kram, bis er so klein ist, dass du nichts mehr löschen kannst ohne dass der Fehler verschwindet. Das Ergebnis postest du dann hier.



  • huzzm schrieb:

    Wenn ich allerdings, die Game.h nur in die Texture.cpp inkludieren, dann funktioniert alles einwandfrei. Ich brauche ja auch den Renderer nur in der .cpp der Texture Klasse, da ich ja nichts deklarieren muss. Das so zu machen ist halt nur nicht schön und richtig oder?

    Was soll daran hässlich oder falsch sein?



  • huzzm schrieb:

    mgaeckler schrieb:

    Forwarddeclaration könnte Dein Problem lösen.

    Das werde ich gleich mal versuchen. 🙂

    Ich habs jetzt mit einer Vorwärtsdeklaration versucht, allerdings kommt dann der Linker-Fehler:
    error LNK1120: 1 nicht aufgelöste Externe

    Dieser kommt immer, wenn man eine Funktion nur deklariert, nicht aber implementiert. Dabei funktioniert eine Vorwärtsdeklaration doch so... 😞



  • Das ist ein Linker-Fehler, d.h. die Implementation der Funktion mußt du schon mitgeben (nur kann diese eben dann in einer anderen Code-Datei oder Library sein).



  • Th69 schrieb:

    Das ist ein Linker-Fehler, d.h. die Implementation der Funktion mußt du schon mitgeben (nur kann diese eben dann in einer anderen Code-Datei oder Library sein).

    Ja genau. Ich habe ja die Funktion in einer anderen Klasse in einer anderen Datei implementiert. Vielleicht habe ich etwas Anderes bei der Vorwärtsdeklaration falsch gemacht:

    In der Texture.h:

    SDL_Renderer* getRenderer();
    
    class Texture
    {
      (...)
    };
    

    Benutzt wird die vorwärtsdeklarierte Funktion getRenderer() allerdings nur innerhalb von Memberfunktionen der Texture-Klasse in der Texture.cpp Datei!

    In der Game.h:

    class Game
    {
    private:
      SDL_Renderer* renderer;
    public:
      SDL_Renderer* getRenderer()
      {
        return renderer;
      }
    };
    

    Habe ich die Vorwärtsdeklaration richtig angewandt?



  • huzzm schrieb:

    Habe ich die Vorwärtsdeklaration richtig angewandt?

    Nein, deine Deklaration ist eine freie Funktion, keine Memberfunktion der Klasse Game. Wenn Texture diese aufrufen will, braucht es die ganze Definition der Klasse Game.



  • Nathan schrieb:

    huzzm schrieb:

    Habe ich die Vorwärtsdeklaration richtig angewandt?

    Nein, deine Deklaration ist eine freie Funktion, keine Memberfunktion der Klasse Game. Wenn Texture diese aufrufen will, braucht es die ganze Definition der Klasse Game.

    Heißt also, ich muss noch die Klasse Game vorwärtsdeklarieren?

    class Game;
    SDL_Renderer* Game::getRenderer();
    

    Außerdem würde ich gerne noch wissen, ob es die Vorwärtsdeklaration irgendwie beeinträchtigt, wenn die beiden Dateien in unterschiedlichen Unterordnern sind, aber halt im gleichen Projektordner.



  • Nein, du kannst das nicht vorwärts deklarieren.
    Dss geht nicht.



  • Nathan schrieb:

    Nein, du kannst das nicht vorwärts deklarieren.
    Dss geht nicht.

    Oh ok schade.


Anmelden zum Antworten