Announcement

Collapse
No announcement yet.

Zeiger auf Funktionen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeiger auf Funktionen

    Hallo C++ Freunde,

    ich arbeite mit Borland C++Builder3.
    Nun hätte ich gerne ein Array von Zeigern auf Funktionen verwendet, etwa
    nach dem Muster:
    int (*Funktionszeiger[])(int,int) = {Funkt1,Funkt2,Funkt3};

    Doch ich scheitere schon bei der einfachen Implementierung eines solchen Zeigers, z.B.

    void TForm1::ZeigeZahl(int x)
    {
    ShowMessage(x);
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    void (*Funktionszeiger)(int);
    int y=10;
    Funktionszeiger = ZeigeZahl; //->Fehler
    Funktionszeiger(y);
    }

    Hier erscheint die FehlerMeldung:
    [C++Fehler] FunktArray1.cpp(61): Member function must be called or its address taken.

    Die Funktion "ZeigeZahl" ist selbstverständlich in der Header-Datei deklariert.

    Wenn ich entsprechendes als Kommandozeilen-Programm compiliere funktioniert es problemlos.
    Wo liegt der Fehler?

    Günter.

  • #2
    Wäre ja auch nicht schlecht zu wissen, was für ein Fehler kommt....

    Wo liegt der Fehler?
    Das ZeigeZahl eine Klassenfunktion von Form1 ist. Def./Dekl. sie außerhalb einer Klasse
    Christian

    Comment


    • #3
      Zeiger auf Funtionen

      Hallo Christian,

      Danke für den Tip.
      Ich wollte das Zeiger-Array zwar nicht direkt in Form1 verwenden, sondern in einer Klasse innerhalb davon, kommt aber auf dasselbe heraus. Ein Array in dieser Klasse sollte die Adressen der Funktionen dieser Klasse aufnehmen.
      Schade. Gibt es einen plausiblen Grund dafür, warum das nicht geht?
      Günter.

      Comment


      • #4
        Gibt es einen plausiblen Grund dafür, warum das nicht geht?
        Der würde mich auf interessieren....
        Christian

        Comment


        • #5
          Versuch es mal so:

          void __fastcall TForm1::Button1Click(TObject *Sender)
          {
          void (__closure *Funktionszeiger)(int x);
          Funktionszeiger = ZeigeZahl;
          Funktionszeiger(10);
          }
          //---------------------------------------------------------------------------

          Comment

          Working...
          X