MFC Klassen: Zugriff auf Klassenvaribalen aus anderer Klasse



  • Hallo,

    ich habe ein kleines Problem. Ich habe ein MFC Prg. geschrieben und möchte
    jetzt auf die Variable aus einer anderen Klasse zugreifen.
    Wie kann ich das am besten machen?

    Grüße Christoph



  • Am saubersten ist, wenn du eine Get-Funktion schreibst.

    Wenn die Variable also

    protected:
    int m_nZahl;
    

    ist, dann sieht die Funktion so aus:

    public:
    int GetZahl() const;
    
    //...
    
    inline int CDieKlasse::GetZahl() const
    {
    return m_nZahl;
    }
    


  • Hi,

    verstehe ich noch nicht so ganz:

    class CEditorView
    
    public m_x;
    //...
    

    das ist meine Klassendefinition. Und ich möchte jetzt gern aus dieser Klasse in einer Methode

    CLeftView::Mouse()
    {
    //Zugriff auf m_x
    }
    

    Wie mache ich das dann am besten? Mit dem Inline verstehe ich nicht ganz....



  • ich würds so machen, wie estartu_de es gesagt hat.

    wo du geschrieben hast "//Zugriff auf m_x", da setzt du einfah die funktion GetZahl() ein, die du vorher in deiner klasse CEditorView erstellt hast.
    und in dieser funktion steht das was estartu da unten geschrieben hat.



  • also, ich würd mir mal erst c/c++ aneignen <- gehört nämlich zu den grundlagen !!!!!



  • Wenn ich das so mache:

    class CEditorView
    
    public m_x;
    //...
    
    inline int CEditorView::getZahl() const
    {
    	return x1;
    }
    
    CLeftView::Mouse()
    {
     int t;
     t=getZahl(); //Fehler: getZahl nciht deklarierter Bezeichner
    }
    

    So kann ich dann auch nciht auf die Methode der anderen Klasse zugreifen.

    Könnt ihr mir nochmal helfen?

    Gruß Christoph



  • Wenn dich das inline iritiert, lass es weg.
    Dann muss der Funktionsrumpf aber ins cpp - ich hab ihn ins .h gepackt.

    Minifunktionen (Faustregel 5 Zeilen ohne {}) können inline gemacht werden und dann unter der Klasse ins .h geschrieben werden. Lies es nach, wenn du es genauer möchtest. 🙂



  • thodtie schrieb:

    Wenn ich das so mache:

    class CEditorView
    
    public m_x;
    //...
    
    inline int CEditorView::getZahl() const
    {
    	return x1;
    }
    
    CLeftView::Mouse()
    {
     int t;
     t=getZahl(); //Fehler: getZahl nciht deklarierter Bezeichner
    }
    

    So kann ich dann auch nciht auf die Methode der anderen Klasse zugreifen.

    Könnt ihr mir nochmal helfen?

    Gruß Christoph

    wundert dich dass das nicht funktioniert ?? mich nicht !

    Du programmierst ??? mann, wenn ich das lese stellt es mir dir Haare auf !!!!
    Nich mal die Grundlagen der C++ - Programmierung !!!!

    Erst mal einen fetten Schöcker über C++ durchackern, dann MSDN lesen, dann MFC coden und erst DANN solchen Schwachfug ins Forum posten !!!!!!!!



  • Motherfucker hat es schon ziemlich gut formuliert, auch wenn ich es nicht so ausgedrückt hätte.

    Ich kann die Fehlermeldung nur wiederholen: Du hast die Funktionsdeklaration vergessen. 🙄

    Was ist m_x?
    Was ist x1?



  • Ich seh das ganze ein wenig anders.
    Der Zugriff auf eine andere MFC Klasse im Doc/View Modell ist nicht ganz so einfach. Wie die grundlegenden Dinge funktionieren weiß ich natürlich.

    Ich hab das ganze jetzt gelöst mit dem Doc/View Modell.

    Trotzdem danke für die hilfreichen Kommentare vorallem von motherfucker, bei dem passt auch der Schreibstil zu seinem Namen sowas unqualifiziertes!



  • Hallo? Kriege ich mal ne Antwort? 🙄

    Gegen die "Mauer" rennst du bald wieder...



  • Was ist m_x?
    Was ist x1?

    m_x ist vom Typ int auch x1
    und x1 soll den Wert von m_x bekommen.

    Gruß Christoph



  • Wenn m_x eine Zahl ist, dann ist die Zeile nicht vollständig, die du da im Beitrag hast.

    Wenn das public ist (was gerne aus Faulheit oder Unwissenheit gemacht wird), dann brauchst du die Funktion nicht, sondern kannst direkt mit Hilfe einer Instanz der enthaltenden Klasse darauf zugreifen.

    Du musst dafür aber die aktuelle Instanz deines View haben. Also einen Zeiger darauf zum Beispiel. Da gibt es bestimmt eine Funktion, die dir den gibt.
    (Such erstmal, ich muss auch suchen...)

    Wenn das nicht public ist, dann brauchst du so eine Funktion.

    Okay?



  • thodtie schrieb:

    Trotzdem danke für die hilfreichen Kommentare vorallem von motherfucker, bei dem passt auch der Schreibstil zu seinem Namen sowas unqualifiziertes!

    Ist mir eine Ehre ! 🤡 🤡 🤡


Anmelden zum Antworten