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


Anmelden zum Antworten