mit static funktion zugriff auf abstracte ATL class
-
Hi ich benötige dringend eure hilfe ja sonst wär ich wohl nicht in diesem Forum.

Also es sieht so aus ich habe einen abstracte Klasse(ATL-Control) welche Events Firen kann(was auch ganz normal funktioniert). Jetzt aber zum Problem, ich habe einen Normale Classe die mehrere funktionen hat. Einen Davon ist statisch. Wenn diese funktion ausgeführt wird möchte ich im ATL-Object ein Event auslösen. Das funktioniert jedoch nicht da ich keine Instanz vom ATL-Object erzeugen kann(abstrtact) und auch keinen Pointer darauf abspeichern kann.
Hatte irgendjemand schon mal so ein Problem, bitte helft mir ich bin am verzweifeln
!!!!MTG To.S
-
Die statische Methode hat keinen Bezug zu einem bestimmten Klassenobjekt (also keinen this-Zeiger). Aber du kannst dir auf anderem Wege ein passendes Objekt erzeugen, wenn du es benötigst:
class test { ATL_Control * target; public: void normal_fkt() { target->fire(...); } static void static_fkt1(test& user) { user.target->fire(...); } static void static_fkt2() { static test main_user; main_user.target->fire(...); } };
-
Implementier doch die abstrakten Funktionen in einer Dummy Klasse, anders wirst Du wohl keine Chance haben. Wenn Du Glück hast sinds nicht mal allzu viele abstacts.
EDIT: Wenn Du das ATLObjekt der Klasse nur einmal für alle Objekte benötigst kannst Du dieses statisch erzeugen, damit ist es auch in einer statischen Funktion vefügbar.
Ich versuche aber gerade noch die Varinate von CStoll zu verstehen

-
ich kann leider die ATL-Control-Object nicht in meinener Class-definition implementitiern da ich ich in der ATL-Object-definition schon die Classe benötige!
d.h.
class test { ATL-Object *target //geht nicht da ich ATL-Object.h nicht inkludieren kann!! .... //da ich schon im ATL-Object.h die test.h inkludiert habe!! }
-
class test { ATL-Object *target //geht nicht da ich ATL-Object.h nicht inkludieren kann!! .... //da ich schon im ATL-Object.h die test.h inkludiert habe!! }[/quote]
Schreib einfach in den Header der test class, vor das class: class ATL-Object;
und dann inkludierst Du den Header im cpp der test-Klasse.
(siehe aber auch edit vorheriger post).
-
To.S schrieb:
ich kann leider die ATL-Control-Object nicht in meinener Class-definition implementitiern da ich ich in der ATL-Object-definition schon die Classe benötige!
Hast du schonmal etwas von Forward Deklarationen gehört?
(btw, woher bekommen eigentlich deine normalen Methoden ihr ATL-Objekt? Und warum kann eine statische Methode nicht den selben Ansatz verwenden?)
-
den normalen methoden kann ich ein LPVOID param mitgeben einfach gezeigt:
test.cpp:
ATLObject.h ATLObject *atl void meinefunc1(LPVOID param) { atl = (ATLObject*)param; }ab sofort können alle normalen klassen auf das atlobject und die events zugreifen die statischen aber nicht da ich die definition des ATL-objectes nicht in der Classdefintion der Test class habe. Und dies geht nicht da ich ansonsten in der Test.h die ATLObject.h includieren müsste und in der ATLObject.h die Test.h usw............ da bekomm ich dann einen compiler error too many include file depth=1024
-
Nochmal Stichwort: Forward-Deklaration.
connan schrieb:
class ATL-Object; class test { ATL-Object *target .... }Schreib einfach in den Header der test class, vor das class: class ATL-Object;
und dann inkludierst Du den Header im cpp der test-Klasse.
-
Erstens: dein
ATLObject *atl;steht außerhalb der Klassendefinition (soweit ich das sehe), also kann jede Methode damit rumspielen, die es sehen kann - inklusive der staischen Methoden. (das ist eine ganz normale globale Variable und technisch unabhängig von der test-Klasse)Zweitens: Um einen Zeiger zu definieren, braucht der Compiler nicht die volle Klassendefinition, da reicht eine Forward-Deklaration völlig aus:
//test.h //hier kein #include "ATLObject.h" class ATLObject; class test { ATLObject * atl; ... };PS: Und eventuell solltest du dir mal ansehen, was ein Include-Guard ist

-
thks das wars danke warum habe ich noch nie etwas davon gehört das erleichtert einem das Leben ja enorm geil absolut geil danke