Zugriff auf Document-Klasse von Dialog aus
-
Hallo,
ich habe ein kleines Problem: und zwar möchte ich von einem Dialog aus auf meine Documenten-Klasse zugreifen.
Ich habe dazu folgenden Code im Dialog reingenommen:
In der cpp:#ifdef _DEBUG CRVSDoc* CKundenDlg::GetDocument() const // Nicht-Debugversion ist inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRVSDoc))); return (CRVSDoc*)m_pDocument; } #endif //_DEBUG
und im Header:
#ifndef _DEBUG // Debugversion in KundenDlg.cpp inline CRVSDoc* CKundenDlg::GetDocument() const { return reinterpret_cast<CRVSDoc*>(m_pDocument); } #endif
Ich habe das schon etliche Male in anderen Klassen genauso gemacht und auch im selben Projekt in der View-Klasse. Nur in dem Dialog hat der Compiler etwas gegen das "m_pDocument": nichtdeklarierter Bezeichner.
In den anderen Fällen mußte ich noch nie etwas Besonderes dazunehmen und trotzdem hat es immer funktoniert.Kann mir jemand helfen?!
Vielen Dank schon mal!!
-
m_pDocument ist eine Membervariable von CView. Deswegen geht das dort, aber im Dialog nicht, da du ja nichts in eine Variable schreiben kannst, die es nicht gibt.
Deklarier einfach in deiner Dialogklasse diese Variable, und initialisier sie am besten gleich im Konstruktor:
[cpp]CMeineAnwendungDoc* m_pDocument; //und im ctor: m_pDocument = static_cast<CFrameWnd*>(AfxGetApp()->m_pMainWnd)->GetActiveDocument();[/cpp]
Dann müsst das klappen.
Gruß Brainiac
-
Na hallo,
danke erstal für Deine Antwort!
Ich habe es mal so übernommen, es gibt nur ein Problem noch:
Wenn ich die wie von Dir vorgeschlagen die Variable CRVSDoc* m_pDocument eintrage, dann kommt folgende Fehlermeldung beim Kompilieren:
error C2440: '=': 'CDocument *' kann nicht in 'CRVSDoc *' konvertiert werdenWenn ich statt CRVSDoc* nur CDocument* nehme, dann funktioniert zwar das Kompilieren, aber wenn ich dann das Programm starte, dann bekomme ich die Meldung: "Debug Assertion Failed".
Hast Du oder hat jemand eine Idee, was ich machen kann?!
Schon mal vielen Dank!