Funktion mit Parameter aufrufen, aber welcher Parameter?



  • hey, ich habe eine headerdatei, die ich in mein Programm einfüge, welche eine Funktion package() besitzt. In dieser Funktion will ich eine andere Funktion aus meinem Programm aufrufen. Diese Funktion ist

    void __fastcall Tfrm_startPacker::TForm_saveClick(TObject *Sender){
    //...
    }
    

    Nun rufe ich diese Funktion in package() mit

    Tfrm_startPacker::TForm_saveClick();
    

    auf, aber er meckert wegen dem Parameter. Leider weiß ich nicht, welchen Parameter ...

    Fehler:

    [BCC32 Fehler] package.h(2): E2283 Verwenden Sie . oder -> zum Aufruf von '_fastcall Tfrm_startPacker::TForm_saveClick(TObject *)'



  • Hallo,

    Die Funktion muß mit dem auslösenden Objekt (dem Sender) als Parameter aufgerufen werden. Wenn es keinen Sender gibt, kann auch NULL übergeben werden.

    Gruß Udo



  • TForm_saveClick(Sender);



  • TForm_saveClick(Sender);
    

    ist aber quatsch, denn Sender ist undefiniert! Für Sender müsste ein TObject eingesetzt werden und dieses heißt dann in der Funktion saveClick() 'Sender'.

    NULL klingt viel plausibler! Das habe ich auch schon mal irgendwo gehört bzw. gelesen. Ich glaube, bei der MessageBox ...
    Aber leider funktioniert es mit der NULL auch nicht:

    [BCC32 Fehler] package.h(7): E2283 Verwenden Sie . oder -> zum Aufruf von '_fastcall Tfrm_startPacker::TForm_saveClick(TObject *)'



  • Die Methode benötigt eine Instanz. Wenn package in der gleichen Klasse ist, lass das Tfrm_startPacker:: .



  • Der Aufruf sollte ja auch so aussehen (innerhalb der Klasse Tfrm_startPacker).

    TForm_saveClick(0);
    

    Außerhalb dann eben mit Hilfe der entsprechenden Instanz von Tfrm_startPacker.



  • Schreibe ich nur

    TForm_saveClick(0);
    

    meckert er wegen

    [BCC32 Fehler] package.h(7): E2268 Aufruf der undefinierten Funktion 'TForm_saveClick'

    Lass ich es aber so

    Tfrm_startPacker::TForm_saveClick(0);
    

    bekomme ich diesen Fehler

    [BCC32 Fehler] package.h(7): E2283 Verwenden Sie . oder -> zum Aufruf von '_fastcall Tfrm_startPacker::TForm_saveClick(TObject *)'



  • na dann mach doch einfach mal

    frm_startPacker->TForm_saveClick(0);
    

    wobei frm_startPacker dann auch der Name des Form sein sollte, außerdem sollte die Methode TForm_saveClick public sein und die Unit/Header welche Tfrm_startPacker enthält muß dort includiert sein, wo du die Methode TForm_saveClick aufrufen willst

    eigentlich funktioniert das wie im FAQ-Beitrag "Variablenübergabe an andere Form"



  • ok jetzt funktiobierts! 🙂

    wie macht man denn eine __fastcall-Funktion public? ist die das nicht schon von alleine?



  • Irgendwie hab ich das Gefühl dir fehlen noch ein paar entscheidende Grundlagen zum Arbeiten mit Klassen. Mit _fastcall hat das nämlich garnix zu tun, sondern in welchem Bereich einer Klasse (class) die Funktion/Variable steht. Dazu brauchst du dir nur mal den Header von Tfrm_startPacker ansehen.


Anmelden zum Antworten