Zugriff von Haupdialog auf Nebendialog OK. Andersherum Problem ?
-
Ich habe mit Visual C++ mehrere Klassen Erstellt die alle von CDialog abgeleitet sind.
Nun kann ich Problemlos über erstellte Klassenvariablen auf Funktionen bzw. Variablen aus diesen zugreifen.
Aus Haupdialog auf Nebendialog mit: m_nebendialog.Funktionausnebendialog();
(m_nebendialog ist variable auf die Klasse des Nebendialogs, nebendialog.h ist in hauptdialog.cpp included)
Ich kann also von dem Hauptdialogfeld über eine erstellte Klassenvariable auf Elemente eine Nebendialogfelds zugreifen, umgekehrt sogar auch.
Aus Nebendialog mit Hauptdialog mit: m_hauptdialog.Funktionaushauptdialog();
(m_Hauptdialog ist variable auf die Klasse des Hauptdialogs, hauptdialog.h ist in nebendialog.cpp included)Nur beides gleichzeitig geht nicht. Dann bekomme ich Fehlermeldungen vom Compiler.Das muß doch irgendwie gehen oder ?
Möglich das das irgendwie an einer falschen oder nicht vorhandenen Include Einbindung liegt.
Bin für weitere Ideen dankbar.
-
Komisch, dass diese Frage sich ca. alle 2 Wochen wiederholt
pointer will nich durch mehrere klassenAls 1 Beispiel.
-
Der Fehler liegt bei den Includes.
Es ergibt eine Zirkeldefinition wenn du dein Nebendialog in den Hauptdialog einbindest und dann den Hauptdialog in den Nebendialog.Eine Datei muss zuerst kompiliert werden.
Mögliche Lösung:
Hauptdialog.h in Nebendialog.cpp einbinden, mit GetParent() eine CWnd-Pointer zum Hauptdialog holen und diesen auf deinen Hauptdialog umcasten.
-
Ja Sorry, liegt wohl an der bloedheit der Benutzer.
Aber ich muß sage das ich das nicht so ganz geblickt hab.
Ich kannst ja nochmal versuchen.
Diese Mögliche Lösung, kannst du die etwas weiter erläutern ?
Trotzdem thx.
[ Dieser Beitrag wurde am 11.03.2003 um 08:53 Uhr von Imar editiert. ]
-
// Hauptdialog.h #include "Nebendialog.h" class CHauptDialog { public: CNebenDialog m_NebenDialog; // Der 'Unterdialog' void TueWas(); void FunktionWelcheAufNebenDialogzugreift(); void OnCreate(...); }; // Hauptdialog.cpp void CHauptDialog::OnCreate(...) // oder eine andere Funktion, die den Nebendialog erstellt { m_NebenDialog.Create( this, ...); m_NebenDialog.SetOwner( this); } void CHauptDialog::FunktionWelcheAufNebenDialogzugreift() { m_NebenDialog.TueWas(); } // NebenDialog.h class CHauptDialog // Vorwärtsdeklaration class CNebenDialog : public CDialog { CHauptDialog* m_pHauptDialog; void SetOwner( CHauptDialog* pHauptDialog); void FunktionWelcheAufHauptDialogzugreift(); void TueWas(); }; // NebenDialog.cpp #include "HauptDialog.h" void CNebenDialog::SetOwner( CHauptDialog* pHauptDialog) { m_pHauptDialog = pHauptDialog; } void CNebenDialog::FunktionWelcheAufHauptDialogzugreift() { m_pHauptDialog->TueWas(); }
Also noch genauer gehts nun wirklich nicht!! Gehört aber grundsätzlich nicht zur MFC sondern sind C++-Grundlagen !!