Adresse von 2. Klasse an 1. Klasse übergeben



  • Hallo!

    Ich habe da ein kniffliges Problem.

    Ich habe 2 Klassen. Ich würde gerne die Adresse von Klasse 2 zu einem Pointer in Klasse 1 übergeben.

    Das Problem ist, dass Klasse 1 VOR Klasse 2 deklariert und initialisiet wird.

    Ich sehe einfach nicht, wie ich die Adresse übergeben kann, ich habe einfach keinen Zugriff.

    Alles was mir noch einfallen würde, wäre vllt ein Makro das ich über Klasse 1 schreibe und die Datei der Klasse 2 läd. Aber mit Makros kenne ich mich garnicht aus.

    Ich hoffe ihr könnt mir helfen 😞

    Grüße,
    Bizarreofnature



  • Zeig mal Code-Ausschnitte, die dein Problem darstellen, und wo du auf was zugreifen willst.

    Zudem verwendest du Begriffe falsch. Eine Klasse ist ein Bauplan für Objekte, mehr nicht. Eine Klasse hat keine Adresse. Ein Objekt hat eine Adresse.



  • Zudem verwendest du Begriffe falsch. Eine Klasse ist ein Bauplan für Objekte, mehr nicht. Eine Klasse hat keine Adresse. Ein Objekt hat eine Adresse.

    Danke erstmal für die rasche Antwort.
    Ja das stimmt natürlich. Mein Fehler.

    Also hier die Main.cpp wo die Klassen geladen und initialisiert werden:

    #include "../Classes/CGameDataStorage.h"
    #include "../Classes/CGame.h"
    
    ..
    
    CGame cGame;
    

    CGameDataStorage wird sofort geladen, CGame (wie man sieht) später.
    CGameDataStorage soll später die Adresse des CGame Objekts haben.

    class CGameDataStorage
    {
    	private:
    
    	public:
    		// Pointer auf cUpgradeMenu und cGame 
    		// (Wird in den jeweiligen Konstruktoren initialisiert) 
    		// (Wird beides nicht resettet) 
    		// (Wird verwendet um Zugriff zu gewähren)
    		//CGame *cGameAccess;
    
    };
    

    Und genau hier ist das Problem. "CGame *cGameAccess" gibt mir 3 Fehlermeldungen.
    Was ja auch logisch ist. Ich habe ja CGame noch garnicht geladen und will schon darauf zugreifen 😞



  • Bizarreofnature schrieb:

    class CGame; // Vorwärtsdeklaration
    class CGameDataStorage
    {
    	private:
    
    	public:
    		// Pointer auf cUpgradeMenu und cGame 
    		// (Wird in den jeweiligen Konstruktoren initialisiert) 
    		// (Wird beides nicht resettet) 
    		// (Wird verwendet um Zugriff zu gewähren)
    		//CGame *cGameAccess;
    };
    

    Eine Vorwärtsdeklaration sollte ausreichen.



  • Absolut genial! DANKE!

    Noch eine letzte Frage.

    Wie übergebe ich jetzt eigentlich die Adresse ? ich hab hier "this" verwendet, aber das ist doch ein Pointer 😕



  • Achso ich habe vergessen zu erwähnen, dass die Adresse vom CGame Objekt im Konstruktor übergeben werden soll. Also kann ich &cGame natürlich nicht machen, da es noch kein cGame Objekt gibt.



  • &cGame
    

    Dem Konstruktor übergeben

    Das cGame Objekt hast du doch in der main erstellt.



  • Danke dir. Ich habe jetzt allerdings eine Fehlermeldung die ich nicht weg bekomme.

    Hier jetzt in Main die Adresse übergeben:

    ...
    CGame cGame;
    
    cGameDataStorage.cGameAccess = &cGame;
    

    Hier die Datastorage Klasse:

    class CGame; /Vorwärtsdeklaration
    
    ...
    
    public:
       CGame *cGameAccess;
    

    Und hier eine kleine Test Memberfunktion von cGame:

    cGameAccess->test();
    

    Gibt folgende Fehlermeldung:

    use of undefined type 'CGame'
    

    Die Testfunktion gibt diesen Fehler.



  • Du hast ja eine CGameDataStorage.hpp und eine CGameDataStorage.cpp Datei oder? In die CGameDataStorage.cpp musst du CGame.hpp inkludieren, sonst ist es undefiniert.



  • Alles klar vielen dank 🙂


Anmelden zum Antworten