Aus einer Klasse X, Funktionen der Klasse Y aufrufen?



  • Hallo zusammen,

    ich habe zwei Klassen CX und CY.
    Die Klsse CX hat eine Public Methode BYTE GetValue();. Diese möchte ich aus der Klasse CY aufrufen.

    Hier ist der Code:

    Main:

    #include "Y.h"
    #include "X.h"
    CY Cy;
    CX Cx;
    
    void main()
    {
    Cy.test();
    return 0;
    }
    

    Y.h

    #ifndef __Y_H__
    #define __Y_H__  // include once only ...
    
    #include "X.h"
    
    class CY
    {
    // Memberfunctions
    public:
    	void test();
    private:
    
    protected:
    };
    #endif
    

    X.h

    #ifndef __X_H__
    #define __X_H__  // include once only ...
    
    #include "Y.h"
    
    class CX
    {
    // Memberfunctions
    public:
    	BYTE GetValue();
    private:
    
    protected:
    };
    #endif
    

    Y.cpp

    void CY::test()
    {
    BYTE temp;
     temp=Cx.GetValue();
    }
    

    X.cpp

    BYTE CX::GetValue()
    {
    return 4;
    }
    

    Dieses Programm ergibt zwar keinen Sinn, erklärt aber mein Problem. Bei mir erscheint dann die Fehlermeldung: Cx undeclared identifier.
    Der Konstruktor und Destruktor sind mit absicht weggelassen worden.

    Wie geht es Richtig? Cx ist doch global verfügbar gemacht worden in der Main.

    Gruß spacehelix



  • Hallo

    #include "Y.h"
    #include "X.h"
    CY Cy; // Hier brauchst du nur Cy zu dekalrieren
    
    void main()
    {
    Cy.test();
    return 0;
    }
    

    Y.h

    #ifndef __Y_H__
    #define __Y_H__  // include once only ...
    
    class CY
    {
    // Memberfunctions
    public:
    	void test();
    private:
    
    protected:
    };
    #endif
    

    X.h

    #ifndef __X_H__
    #define __X_H__  // include once only ...
    
    extern CX Cx; // Hier must du Cx deklarieren
    
    class CX
    {
    // Memberfunctions
    public:
    	BYTE GetValue();
    private:
    
    protected:
    };
    #endif
    

    Y.cpp

    #include "X.h" // Hier must du CX includen
    void CY::test()
    {
    BYTE temp;
     temp=Cx.GetValue();
    }
    

    X.cpp

    CX cx; // Hier must du Cx implementieren und initialisieren
    
    BYTE CX::GetValue()
    {
    return 4;
    }
    

    Allerdings sind globale Variablen nicht gut, nimm lieber Übergabe-Parameter

    /Edit : Includes korrigiert.

    bis bald
    akari



  • Du darfst nicht gegenseitig die Dateien "x.h" und "y.h" in den Headerdateien einbinden. Such mal nach dem Begriff "Vorwärtsdeklaration" (forward declaration).

    @akari: das kommt davon, wenn man Code ungetestet übernimmt... (aber bei diesem einfachen Code sind die includes sowieso überflüssig).



  • Hi

    Danke für die Hilfe. Es funktioniert jetzt.


Anmelden zum Antworten