set und get bei Klassen in MFC



  • Hi,
    es ist sicherlich eine ziemliche dumme Anfängerfrage aber ich komme gerade echt nicht weiter.

    Ich habe eine neue Klasse über "Einfügen->Neue Klasse->Klassentyp: Allgemeine KLasse" hinzugefügt. Diese nannte ich Kreis. Nun habe ich in "Kreis.h" eine Variable "Test" in den private bereich erstellt und in public die Funktionen "void set_Test(int combi);" und "int get_Test()".

    class Kreis  
    {
    public:
    	Kreis();
    	virtual ~Kreis();
    	void set_test(int combi);
    	int get_test();
    private:
    	int test;
    
    };
    

    In der "Kreis.cpp" habe ich unter den Konstrukter und Destruktor die Funktionen definiert:

    void Kreis::set_test (int combi)
    {
    	test=combi;
    }
    
    int Kreis::get_test()
    {
    	return test;
    }
    

    In der Dlg.cpp habe ich noch die Headerdatei implementiert "#include "Kreis.h".
    Auf meinen Dialog habe ich zwei Buttons, bei den einen übergebe ich der "set_Test"-Funktion einen Wert 2 und bei den zweiten Button lese ich den Wert aus der Variable Test:

    void CUhuhuawhDlg::OnButton1() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	int b;
    	b=2;
    	Kreis setzen;
    	setzen.set_test (b);
    }
    
    void CUhuhuawhDlg::OnButton2() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	int a;
    	Kreis rufen;
    	a=rufen.get_test ();
    	if (a==2)
    	{
    		MessageBox("The quick brown fox jumps over the lazy dog","",0);
    	}
    
    }
    

    Doch leider funktioniert das nicht, er gibt mir immer nur diesen Wert zurück:
    "-858993460". Die get-Funktion läuft, denn wenn ich mit den Konstruktor "test" den Wert 2 gebe, gibt er mir auch die zwei zurück.
    Ich hoffe ihr könnt mir helfen.
    Mfg Mike



  • rufen.test ist ja auch nicht initialisiert.

    void CUhuhuawhDlg::OnButton2()
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        int a;
        Kreis rufen;
        [b]rufen.set_test (2);[/b]
        a=rufen.get_test ();
    	if (a==2)
        {
            MessageBox("The quick brown fox jumps over the lazy dog","",0);
        }
    }
    


  • Dir ist aber klar, dass es sich bei setzen und rufen um lokale Variablen handelt, die beim nächsten } wieder destruiert werden? Du bekommst mit rufen.get_test() nicht das zurück, was Du mit setzen.set_test() übergeben hast.
    Ich frag ja nur, weil ich solch denkwürdige Konstruktionen von unseren Azubis her kenne 🤡



  • Aso, das wusste ich nicht. Ich dachte immmer das ich über die set-funktion, etwas in die Variable speichern kann, die im private Bereich steht und das das dann auch soweit erhalten bleibt, wie bei einer globalen Variable. Da muss ich wohl was falsch verstanden haben.
    Trotzdem Danke für die Antwort. 😋



  • Mit

    Kreis rufen;
    

    erzeugst du dir ja eine neue Instanz der Klasse Kreis indem der Konstruktor aufgerufen wird. Mit komplett neuen Variablen. Du könntest z.B. zu diener Dialogklasse eine Membervariable vom Typ Kreis hinzufügen, dann würde das gehn.
    Dann aber

    Kreis rufen;

    und

    Kreis setzen;

    weglassen. Und die Funktionen für deine Membervarialbe aufrufen.



  • Vielendank für den Tip, doch leider bekomme ich das nicht so recht hin, ich habe jetzt eine Variable vom Typ Kreis erzeugt aber da meckert er immer: "'Test' : Verwendet soeben definiertes 'Kreis'". Könntest du mir vielleicht so ein Projekt mal schicken? Wäre echt super nett von dir.
    Mfg Mike



  • CUhuhuawhDlg.h

    class Kreis  
    {
    public:
        Kreis() : test( 0 ) {}
        virtual ~Kreis() {}
        void set_test(int combi) { test = combi; }
        int get_test() { return( test ); }
    private:
        int test;
    };
    
    class CUhuhuawhDlg : public CDialog
    {
    public:
    	CUhuhuawhDlg(CWnd* pParent = NULL);
    private:
    	Kreis m_kreis;
    };
    

    CUhuhuawhDlg.cpp

    void CUhuhuawhDlg::OnButton1()
    {
        m_kreis.set_test( 2 );
    }
    
    void CUhuhuawhDlg::OnButton2()
    {
        int a = m_kreis.get_test();
        if( a==2 )
        {
            MessageBox("The quick brown fox jumps over the lazy dog","",0);
        } 
    }
    


  • juhu es funktioniert, Tausend Dank. 😃


Anmelden zum Antworten