Zeiger auf CDoc
-
Er ist einfach zu groß ... ok, genug der dummen Sprüche.
Ich habe halt versucht 'nen CXyzDoc-Zeiger als Membervariable anzulegen, aber schon das funktioniert nicht. Ich bekomme dazu keine Fehlermeldung, sondern erst an den Stellen, wo ich Objekte meine Klasse anlege.
-
Indem man ihn der entsprechenden Methode übergibt, oder im Konstruktor. Oder zu allerletzt indem man sich AfxGetApp besorgt und die Doctemplates enumeriert, oder das aktuelle Frame und darin den aktuellen CView und darin das aktuelle Dokument...
Sehr viele Wege führen nach Rom!
-
Also es sieht so aus:
//... #include "XyzDoc.h" class MyClass { private: CXyzDoc* docObj; // ... public: void SetDoc(CXyzDoc* dO) { docObj = dO; } // ... };Ich würde dann in CXyzDoc die Methode MyClass.SetDoc() mit "this" als Parameter aufrufen wollen, aber das ganze funktioniert nicht. Beim Compilieren kommt für den obigen Code keine Fehlermeldung, aber für die Stellen, an denene ich Objekte von MyClass anlege.
-
Evolver schrieb:
Beim Compilieren kommt für den obigen Code keine Fehlermeldung, aber für die Stellen, an denene ich Objekte von MyClass anlege.
Bist du sicher, dass du auch mit dem Objekt hantierst, für das du SetDoc aufgerufen hast?
Du kannst nicht aus einem Schrank herausholen, was du in einen anderen Schrank hineingelegt hast.
-
Es funktioniert schon unabhängig von der Methode SetDoc() nicht, alleine schon wenn ich nur XyzDoc.h inkludiere kommen dann beim Anlegen von Objekten (MyClass) schon Fehler. Kann es etwas damit zu tun haben, dass ich die Objekte in CxyzDoc anlege?
#include "MyClass.h" class CXyzDoc : public CDocument { private: MyClass Obj1, Obj2; //... usw. die typische CDoc, die immer erzeugt wird };Die andere Datei mit der Definition von MyClass ist wie oben in meinem letzten Posting. Ein "#pragma once" ist überall mit drin.
-
Evolver schrieb:
Es funktioniert schon unabhängig von der Methode SetDoc() nicht, alleine schon wenn ich nur XyzDoc.h inkludiere kommen dann beim Anlegen von Objekten (MyClass) schon Fehler.
Und wie lautet die Fehlermeldung?
Wie sehen die Konstruktoren von MyClass aus?
-
Standartkonstruktor, ich habe in der Klasse noch nichts weiter.
MyClass Obj1, Obj2; // <-- Fehlererror C2146: syntax error : missing ';' before identifier 'Obj1'
error C2501: 'CXyzDoc::MyClass' : missing storage-class or type specifiers
error C2501: 'CXyzDoc::Obj1' : missing storage-class or type specifiers
error C2501: 'CXyzDoc::Obj2' : missing storage-class or type specifiersSobald ich also in "MyClass.h" die Datei "XyzDoc.h" inkludiere, kennt er MyClass in XyzDoc.h nichtmehr. Inkludiere ich sie nicht, kann ich meine Objekte anlegen.
-
Das hätte mir vorher auffallen müssen: Die beiden Headerdateien binden sich gegenseitig ein, das funktioniert nicht.
Nimm die Includedirektive aus MyClass.h raus und setze sie in MyClass.cpp. An die Stelle der Includedirektive schreibst du in MyClass.h eine Vorwärtsdeklaration:
class CXyzDoc;Die reicht da aus.
-
-
Danke MFK, genau da lag mein Fahler und - auch wenn ich schonmal irgendwann davon gehört habe - von alleine wäre ich nicht auf die Lösung gekommen.