Klassen mit Prototypen



  • Ich bin noch Anfänger in C++ und versuche mich gerade an OOP. Dabei bin ich auf folgendes Problem gestoßen:

    class CSohn
    {
    	private:
    		CVater* m_pVater;
    
    	public:
    		void SetVater( CVater* pVater )
    		{
    			m_pVater = pVater;
    		}
    };
    
    class CVater
    {
    	private:
    		CSohn* m_pSohn;
    
    	public:
    		void SetSohn( CSohn* pSohn )
    		{
    			m_pSohn = pSohn;
    		}
    };
    

    In CVater wird CSohn verwendet und umgekehrt. Es bringt also nix, eine Klasse vor der anderen zu definieren.
    Meine Frage: Gibt es sowas wie Prototypen für Klassen?



  • Ich bin mir nicht sicher, was Du mit "Prototyp" meinst. Prototyp hat in der OOP eine ganz spezielle Bedeutung, die Du mit großer Wahrscheinlichkeit nicht meinst. Also, was willst Du umsetzen?



  • Bei Funktionen kann ich ja einen Prototyp definieren, und sie dann verwenden, bevor ich schreibe, was sie machen soll:

    void TuWas( );
    
    for( int i=0; i<10; i++ )
    {
    	TuWas( );
    }
    
    void TuWas( )
    {
    	// Und hier stehen erst die Anweisungen ...
    }
    

    Mein Problem ist, dass ich oben CVater in der Klasse CSohn verwende, obwohl CVater noch nicht definiert ist. Ich könnte jetzt zwar zuerst CVater definieren, doch diese Klasse verwendet wiederum CSohn, welcher dann unbekannt wäre.

    Verstanden, was ich meine? Ich hoffe, jemand kann mir helfen. :xmas1:



  • Forward-Deklarationen?

    class CVater;
    
    class CSohn 
    { 
        private: 
            CVater* m_pVater; 
    
        public: 
            void SetVater( CVater* pVater ) 
            { 
                m_pVater = pVater; 
            } 
    }; 
    
    class CVater 
    { 
        private: 
            CSohn* m_pSohn; 
    
        public: 
            void SetSohn( CSohn* pSohn ) 
            { 
                m_pSohn = pSohn; 
            } 
    };
    


  • Ha, dankeschön. Genau das, was ich brauche. :xmas1:



  • void SetSohn( CSohn* pSohn )
    {
    m_pSohn = pSohn;
    }

    meinst du wohl 😃


Anmelden zum Antworten