Klasse in Klasse einbinden



  • Hallo,

    bekomme beim Einbinden einer Klasse in eine Klasse eine Fehler:
    In der MainDlg.h binde ich unter publik wie folgt die Klasse Interface ein:

    public:
    CInterface xS;
    

    In der MainDlg.cpp verwende ich die Funktionen der Klasse Interface wie folgt:

    xS.funktion1();
    

    jetzt möchte ich auch in der Klasse InputDlg wie in der MainDlg.h die idente Klaase CInterface einbinden.
    Hierzu habe ich in der InputDlg.h die Klasse Interface ebenso eingebunden:

    public:
    CInterface xS1;
    

    wie in der MainDlg.cpp kann ich jetzt in der InputDlg.cpp die Funktionen der Klasse CInterface verwenden.

    Jetzt zum Problem: weiters öffne bzw. sollte ich in dieser InputDlg über

    CInputLog dlgInputLog;	
    dlgInputLog.DoModal();
    

    den Dialog InputLog öffnen -> aber sobald der zuvor beschriebene Programmcode

    public:
    CInterface xS1;
    

    in der InputDlg.h aktiv ist, öffnet mir das DoModal den zuletzt mit DoModal geöffneten Dialog - also nicht den gewünschten InputLog.
    Entferne ich in der InputDlg.h das "CInterface xS1;" funktioniert das DoModal aber.
    Es sollte im InputDlg aber beides parallel funktionieren.

    Wo liegt hier der Fehler?
    Ersuche um euren Hinweis.


  • Mod

    Zeig uns mal Code wie Du den Dialog aufrufst.
    An einer Member Variable wird das nicht liegen, außer die greift massiv in die Fenster Struktur ein.



  • Habe dies jetzt so gelöst, indem ich die Instanzierung "CInterface xS1;" aus der "InputDlg.h" in die Funktionen der "InputDlg.cpp" verlegt habe.
    So funktioniert auch das DoModal im "InputDlg.cpp".

    Warum die einmalige Instanzierung in der MainDlg.h inklusive der Verwendung von DoModal im MainDlg.cpp funktioniert und dies in der InputDlg nicht, verstehe ich nicht.


  • Mod

    Was Du schreibst macht für mich weder Sinn noch erklärt es den Fehler...



  • Hattest recht - der Fehler kam erneut - die Begründung lag in der SUB-Klasse bzw. deren daraus folgenden Objekten.
    Das erste Instanzieren der SUB-Klasse aus der Main rief das "alte".DoModal in dessen CSUBDlg::SUBDlg auf - dies ist so auch gewollt.
    Doch durch die erneute Instanzierung der SUB-Klasse in der Input Klasse wurde das "alte".DoModal natürlich aus dessen Objekt erneut aufgerufen - und dies war der Fehler.
    Habe jetzt die SUB dementsprechend umgebaut und das "neue".DoModal kommt wie erwartet.


Log in to reply