Übergabe Membervariable an andere KLasse
-
Hoffe ich hab dich richtig verstanden.
Wenn ich in meinem CEditView GetDocument() aufrufe gibt der mir einen CDocument* Pointer zurück.
-
Du hast mich richtig verstanden.
Gut, dann muss man den Zeiger noch casten. Das geht mit
CDatenAnalyzerMDIDoc* pDoc = dynamic_cast<CDatenAnalyzerMDIDoc*>(GetDocument()); ASSERT(pDoc); // Wenns schiefgegangen ist, ist der Zeiger NULL.
Für den Cast musst du wahrscheinlich noch RTTI einschalten:
Projekteinstellungen -> C/C++ -> Programmiersprache C++ -> mittleres Häkchen setzenOkay?
-
Krieg folgende fehlermeldung:
error C2680: 'class CDatenAnalyzerMDIDoc *' : Ungueltiger Zieltyp fuer dynamic_cast
-
Hast du den Code rauskopiert oder abgeschrieben? Wenn du ihn abgeschrieben hast, zeig nochmal.
Ansonsten versuch stattdessen:
CDatenAnalyzerMDIDoc* pDoc = dynamic_cast<CDatenAnalyzerMDIDoc*>(AfxGetMainWnd()->GetActiveDocument()); ASSERT(pDoc); // Wenns schiefgegangen ist, ist der Zeiger NULL.
-
Hab den Code rauskopiert. Bei dem neuen krieg ich ne andere Fehlermeldung:
error C2039: 'GetActiveDocument' : Ist kein Element von 'CWnd'
-
Ach, du hast je eine MDI - das was ich da gemacht habe, hab ich nur in SDIs getestet.
So, jetzt habe ich mir ein Testprojekt erstellt. Und die Getdocument sieht so aus:
CTest_mdiDoc* CTest_mdiView::GetDocument() { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTest_mdiDoc))); return (CTest_mdiDoc*)m_pDocument; }
Versuch die in deinem View mal entsprechend anzupassen.
-
Also in der View hab ich auch schon die GetDocument drin und die sieht so aus:
CDatenAnalyzerMDIDoc* CDatenAnalyzerMDIView::GetDocument() // Die endgültige (nicht zur Fehlersuche kompilierte) Version ist Inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDatenAnalyzerMDIDoc))); return (CDatenAnalyzerMDIDoc*)m_pDocument; }
Die CEditView Klasse, an die ich meine Variable übergeben will ist ja aber nur ein Teil von der ganzen View (eine Registerkarte in einem Splitter).
-
Ich steig durch den MDI-Kram nicht durch.
Man müßte sich doch irgendwie rüberhangeln können, aber ich finde es nicht.
Kommst du vom Doc zum View? Dann könntest du es vorher rübergeben.Ansonsten bin ich jetzt echt ratlos. Ich hatte mal Code dafür, aber ich finde ihn nicht mehr.
-
Vielen Dank auf jeden fall erstmal für deine Zeit und Hilfe.
Werd mir wohl überlegen, ob ich das ganze nicht doch lieber als SDI mache, wenn es da einfacher ist. Ich bin nämlich langsam am verzweifeln an diesem Problem und leider nicht gerade der größte Programmierer
-
Sonst frag doch nochmal unter neuer Überschrift:
"Wie komme ich bei einem MDI vom View zum Doc? oder wie funktioniert UpdateAllViews()?"