Grundlegendes: Funktion in Funktion



  • Hi @ ALL,

    ich habe mal eine grundlegende Frage zu C++. Wie sieht es denn aus mit einem Funktionaufruf in einer Funktion selber. Ich weiss das es theoretisch gehen muss, aber ich weiss nicht wie ich das dem Borland mitteilen kann.

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;

    float Zahl1, Zahl2;

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Zahl1 = StrToFloat (Edit1->Text);
    Zahl2 = StrToFloat (Edit2->Text);
    Label3 -> Caption = FloatToStrF (Zahl1+Zahl2, ffNumber, 7, 3);

    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    int iZufall;
    iZufall = random (5);

    switch (iZufall){

    case 1: TForm1::Button1Click;
    case 2: TForm1::Button2Click;
    case 3: TForm1::Button3Click;
    case 4: TForm1::Button4Click;

    }
    }
    }

    -> Das Problem ist das der Compile mir die Fehlermeldung "[C++ Fehler] Unit1.cpp(77): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden" ausgibt.

    Wie lautet der richtige Aufruf?

    Danke im Voraus.
    CH



  • switch (iZufall){
    
    case 1: TForm1::Button1Click( this );
    case 2: TForm1::Button2Click( this );
    case 3: TForm1::Button3Click( this );
    case 4: TForm1::Button4Click( this );
    
    }
    

    die Funktion erwartet ein Parameter des Typs TObject* genannt "Sender", in dem Fall tuts die Form selber.



  • Keine eurer beiden Varianten wird funktionieren ...

    switch(iZufall)   { 
       case 1: Button1Click(this); break;
       case 2: Button2Click(this); break;
       case 3: Button3Click(this); break;
       case 4: Button4Click(this); break;
    }
    


  • [code]
    switch (iZufall){

    case 1: TForm1::Button1Click( this );break;
    case 2: TForm1::Button2Click( this );break;
    case 3: TForm1::Button3Click( this );break;
    case 4: TForm1::Button4Click( this );break;

    }

    soweit ich weiß oda?



  • das break war mir entgangen 😮

    ging ja zum glück um den funktionsaufruf



  • da stimmt aber noch was nicht mit der klammerung "}"

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Zahl1 = StrToFloat (Edit1->Text);
    Zahl2 = StrToFloat (Edit2->Text);
    Label3 -> Caption = FloatToStrF (Zahl1+Zahl2, ffNumber, 7, 3);
    
    } // <-- hier ein } mehr
    
    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    int iZufall;
    iZufall = random (5);
    
    switch(iZufall)   {
       case 1: Button1Click(this); break;
       case 2: Button2Click(this); break;
       case 3: Button3Click(this); break;
       case 4: Button4Click(this); break;
    }
    }
    } //<-- hier eine weniger
    


  • ach ja stimmt scope auf TForm1:: ist auch unnötig



  • switch (iZufall){

    case 1: TForm1::Button1Click; break; //sonst wirds nie funktionieren!!!
    case 2: TForm1::Button2Click; break;
    case 3: TForm1::Button3Click; break;
    case 4: TForm1::Button4Click; break;

    }
    [/cpp][/quote]



  • Yeah wie geil...es funktioniert. Ihr seid die BESTEN!



  • 1310-Logik schrieb:

    ach ja stimmt scope auf TForm1:: ist auch unnötig

    Nicht unnötig, schlichtweg falsch!


Anmelden zum Antworten