nichtdeklarierter Bezeichner bei Übergabe einer Klasse



  • Hallo...

    Ich hab eine Klasse die als Referenz an diverse Funktionen anderer Klassen übergeben werden soll.

    Soweit so gut, bei einer Klasse funktioniert das.
    In einer anderen Klasse jedoch meckert der Compilier VC++ 6 immer über einen nichtdeklarierten Bezeichner...

    Die HeaderDatei ist natürlich inkludiert.

    Ich poste mal ein Beispiel in der Hoffnung daß der Fehler da schon versteckt ist:

    #ifndef C_MUCK_HPP
    #define C_MUCK_HPP
    
    #include "C_Maindeck.hpp"
    
    class C_Muck{
    
        /* some code*/
    }
    #endif
    

    Die Übergabe der Klasse C_Muck an die nächste läuft Problemlos.

    #ifndef C_PLAYER_HPP
    #define C_PLAYER_HPP
    
    #include "C_Muck.hpp"
    #include "C_MainDeck.hpp"
    
    class C_Player{
            friend class C_Game;
    
    	public:
    		bool MuckCard(C_Muck& Muck, C_MainDeck& MainDeck);
    
            /* some code */
    
    } class Player
    #endif
    

    Die Klasse jetzt (MainDeck) soll ebenfalls eine Referenz erhalten, nimmt sie aber nicht an.
    Sprich C_Muck ist ein nicht deklarierter Bezeichner ab der Stelle wo ein Funktionskopf die Referenz erwartet.

    #ifndef C_MAINDECK_HPP
    #define C_MAINDECK_HPP
    
    #include "C_Muck.hpp"
    #include "GetRandom.hpp"
    #include "C_Framework.hpp"
    #include "C_Sprite.hpp"
    
    #include <list>
    #include <iostream>
    
    class C_MainDeck {
            public:
                 void WillNicht(C_Muck& Muck);   // Das geht nicht
    
           /* some code */
    }
    #endif
    

    Die Klasse C_Muck selbst wird in einer anderen Klasse als MemberVariable erzeugt.

    #ifndef GAME_HPP
    #define GAME_HPP
    
    #include "C_Player.hpp"
    #include "C_Muck.hpp"
    #include "C_MainDeck.hpp"
    #include "Background.hpp"
    
    class C_Game{
    
    	public:
    		void Run ();
    		C_Game();
    	private:
    
    		C_Muck	Muck;		// HIER WIRD DIE INSTANZ ERSTELLT
                                            // public ändert nichts
             /*
                   some code
             */
    }
    #endif
    

    C_Game wird in main erstellt.....

    Btw arbeiten diverse MemberFunktionen der Muck klasse mit Referenzen der Klasse die C_Muck nicht annimmt (C_MainDeck).
    Liegt darin der Fehler?

    /bin/verwirrt

    Danke...



  • #ifndef C_MUCK_HPP
    #define C_MUCK_HPP
    
    #include "C_Maindeck.hpp"
    
    class C_Muck{
    

    ... da das include raus! das kann nicht gehen ... er braucht ja in der inkludierten Datei deine Klasse C_Muck ...



  • ... da das include raus! das kann nicht gehen ... er braucht ja in der inkludierten Datei deine Klasse C_Muck ...

    Schoen waer´s , aber leider braucht C_Muck auch C_MainDeck...

    Wenn ich das #include C_MainDeck rausnehme kann die Klasse nicht mehr auf die Andere zugreifen...

    Also genaugenommem arbeiten BEIDE Klassen mit Referenzen der jeweils anderen

    /bin/völligverwirrt



  • Such mal nach "Forwärtsdeklaration" oder "Forward declaration".



  • Mit der Referenz ist in Ordnung(forward decleration) ... aber nicht mit einer Instanz!



  • hmmm...
    Das mit der Vorwärtsdeklaration klingt vernünftig.
    Hab Testweise mal ein wenig umgebaut. Klappt noch nicht wirklich, da die Klasse noch undefiniert ist...

    wird schon...


Anmelden zum Antworten