Zeiger auf Funktion
-
Hallo,
ich habe Problem bei der Zuweisung des Funktionszeiger der in der Klasse eingebettet ist.
Wenn ich des so deklariere funktioniert es:
// **********************In TCodeFile.h*************************** class TCodeFile : public TFile { public: .... // -> void (*OnErrorr)(AnsiString *, AnsiString *, AnsiString *); .... } //************************************In TMain.cpp************* // -> void ErrorMakeCode(AnsiString *v,AnsiString *n, AnsiString *d); .... __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm_Vorlage(Owner) { Process= new TCodeFile(); // -> Process->OnErrorr =ErrorMakeCode; ..... } ......... // -> void ErrorMakeCode(AnsiString *v,AnsiString *n, AnsiString *d) { } // SO FUNKTIONIERT ALLES //********************************************************* // Wenn ich aber die ErrorMakeCode-Funktion Bestandteile der TMainForm ist , // bekomme ich eine Fehlermeldung: **********************In TCodeFile.h*************************** class TCodeFile : public TFile { public: .... // -> void (*OnErrorr)(AnsiString *, AnsiString *, AnsiString *); .... } //************************************In TMain.h************* class TMainForm : public TForm_Vorlage { // -> void ErrorMakeCode(AnsiString *v,AnsiString *n, AnsiString *d); .... } //************************************In TMain.cpp************* .... __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm_Vorlage(Owner) { Process= new TCodeFile(); // -> Process->OnErrorr =ErrorMakeCode;---> HIER KOMMT DIE FEHLERMELDUNG ..... } ......... void TMainForm::ErrorMakeCode(AnsiString *v,AnsiString *n, AnsiString *d) { }
Weiß einer wo der Unterschied, bzw. der Fehler ist??
Vielen Dank im Voraus!!!Gruss
nettekov/Edit akari : Code-Tags hinzugefügt
-
Bette mal deinen Quellcode in die dafür vorgesehenen [ cpp ] und [ /cpp] -Klammern ein! Dann sieht das gleich viel besser aus.
Das ist der oberste Button ganz links "C/C++"
Angabe der Fehlermeldung ist auch meist hilfreich!
-
Hallo,
Memberfunktionen enthalten immer (unsichtbar) als zusätzlichen Parameter den this-Zeiger der dazugehörigen Klasse. Deswegen kann man die nicht so einfach zuweisen. Um das zu umgehen wurde beim BCB das Schlüsselwort __closure eingeführt (siehe Hilfe).
Lies am Besten auch noch das hier
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39450.html
-
Vielen dank!!!!
jetzt funktioniert!
Alles Gute
Gruss nettekov