this in eine globale Variable packen - wie geht das?



  • Hi, ich bin's schon wieder mit einem neuen Problem:

    ich muß den Zeiger eines Dialogs als externe Varialbe speichern. Damit hätte ich dann immer Zugriff auf allen Membervariablen:

    CTestDlg* zeiger_auf_dialog;

    Frage 1: wo platziert man eine solche externe Variable?
    Frage 2: wo initialisiert man die Variable mit: zeiger_auf_dialog = this?
    Frage 3: wie greift man aus einer Methode darauf wieder zu?

    Ich habe es trotz mehreren Versuchen nicht hinbekommen. Vielleicht ist das noch einfach in "C", aber mit den verschachtelten includes von der MFC ist das zu schwierig für mich. Kennt sich jemand damit aus?

    Vielen Dank.



  • zu Frage1:

    z.B. in der TestDlg.cpp ganz oben: CTestDlg* zeiger_auf_dialog;

    zu Frage2:

    z.B. in der CDialog::OnInitDialog() zeiger_auf_dialog = this;

    zu Frage3:

    in einer fremden Klasse versuche ich:
    zeiger_auf_dialog->m_irgendwas.SetWindowText("Haaaaloooo");

    und es kommt der Fehler...
    error C2065: 'zeiger_auf_dialog' : nichtdeklarierter Bezeichner

    Wie komme ich nun zu der Variable, die anscheinend erstellt werden konnte? Weiß das jemand?



  • in der CPP-Datei der fremden klasse:

    #include "TestDlg.h"
    extern CTestDlg* zeiger_auf_dialog;
    


  • Des Rätsels lösung ist ganz einfach. Der Compiler kennt diese Variable nicht, da du sie nicht extern zur Verfügung stellst.

    Lösung eins:
    Du deklarierst die globale Variable im Header anstatt in der CPP-Datei.

    Lösung zwei:
    Du fügst am Ende des Headers die Variablendeklaration aus der CPP-Datei wie folgt ein...

    extern + Variablenname;

    also quasi wenn in der CPP-Datei steht:
    CMyDialog* m_pMyDialog;

    fügst du in den Header ganz unten ein:
    extern CMyDialog* m_pMyDialog;

    Ich hoffe ich konnte euch weiterhelfen 🙂



  • Oh, da war wohl jemand schneller 😃



  • That's it!

    jippieee - ja - je



  • Globale Variablen sind nicht gut!


Log in to reply