Zeigerproblem
-
Hallo Leute,
ich habe folgendes Problem:
Ich möchte mir von meiner eigenen Klasse aus (nennen wir sie CEigeneKlasse) den akutellen Zeiger von der Dokumentenklasse bzw. der Ansichtsklasse besorgen, damit ich dort eine bestimmte Methode aufrufen kann die diese Parameter benötigt (also Zeiger auf View und Doc).
Leider sind bis jetzt alle Versuche fehlgeschlagen und es gab immer wieder ein Problem.
Ich hoffe einer von Euch kann mir helfen danke im voraus!
-
Ich schmeiß mal was in den Raum, musste mal gucken ob du das geordnet kriegst:
AfxGetMainWnd // <- bei dem bin ich mir nicht komplett sicher.
GetActiveView
GetDocument
dynamic_cast

-
Und was genau ist das Problem ?
Und was genau/wofür ist "CEigeneKlasse" ? Leg die Pointer als Member an und hol dir View und Dokument Pointer an einer Zentralen Stelle wie MainFrame z.B.
-
Ist doch ganz easy. Du hast bestimmt sowas in etwa:
class CEigeneKlasse { private: CDocumentView *myView; };Passend dazu muß irgendwo eine getter-Methode vorhanden sein, die das private Member zurück gibt.
CDocumentView* CEigeneKlasse::getMyView() { return myView; }Wenn dir aber in CEigeneKlasse generell das setzen fehlt, brauchst du eine setter-Methode:
void CEigeneKlasse::setMyView(CDocumentView *view) { myView = view; }Die getter- und setter-Methoden müssen natürlich public sein. So kannst du sowohl den Wert von überall setzen, als auch abfragen.
-
Vielen Dank für die zahlreichen Antworten...
Also beim dynamic_cast bekomme ich eine Warnung ausgeworfen:
C4541: dynamic cast für polymorphen Typ Class View /GR verwendet unvorhersehbares Verhalten möglich...Nach Aufruf des Programms stürzt es ab!
Das Problem liegt darin, also die Klasse CEigeneKlasse dient einer Objektverwalung eines grafischen Editors, wir rufen die Objektverwaltung über einen Button in der Symbolleiste auf. Danach bauen wir eine Datenbankverbindung auf und lesen alle Objekte dort aus und zeigen die Namen in einer ComboBox an. Dort kann man dann ein Objekt auswählen. Wir möchten dann das ausgewählte Objekt über einen Einfügen-Button in den Editor übernehmen. Die Methode zum übernehnmen in den Editor liegt aber in Document und benötigt zusätzlich noch einen Zeiger auf unseren View. Deshalb brauchen wir auch eine Verbindung von unser eigenen Klasse zu View und auch zu Document um diese Methode aufzurufen.
Hoffe jetzt ist es klarer geworden.
Mit GetActiveView und GetActiveDocument hat dieses leider nicht geklappt!!
Danke nochmal für eure Mühe!!!!
-
Für dynamic_cast musst du RTTI anschalten. Das findest du in den Projekteinstellungen unter C++ - Programmiersprache C++

-
Nochmals vielen Dank für Eure Hilfe !
Der Fehler lag die Ganze Zeit darin, dass der Zeiger auf View falsch war.
Jetzt läufts ....