Function-Pointer als return-argument



  • Hallo,
    Ich habe folgendes Problem: 2 Funktionen sollen definiert werden:
    Funktion 1 hat als input-argument ein 'char', output-argument ist ein 'float'.
    Funktion 2 hat als input-argument ein 'int', als output-argument soll ein pointer zu einer funktion mit argumenten des typs 'Funktion 1' geliefert werden.

    Mein Header sieht demnach so aus:

    float funct1(char);
    void* funct2(int);
    

    Mein cpp-file ist folgendermaßen gestaltet:

    #include<iostream>;
    #include "header.h";
    
    using namespace std;
    
    int main(){
    	float (*(*fp) (int))(char);
    	fp=funct2;
    }
    

    Nun soll der pointer fp auf die Funktion 2 zeigen.
    Leider beschwert sich der Compiler über die Inkompatibilität des deklarierten Void-pointers für funktion 2.
    Gibt es irgendeine Möglichkeit, einen allgemeinen Ausdruck für einen Funktions-pointer als return-argument für Funktion 2 im header-file zu schreiben?

    Vielen Dank!



  • Martin2000 schrieb:

    Gibt es irgendeine Möglichkeit, einen allgemeinen Ausdruck für einen Funktions-pointer als return-argument für Funktion 2 im header-file zu schreiben?

    Nein, gibt es nicht. Wenn das so wäre, würde der Funktions-Pointer doch seine Funktion verlieren: anzuzeigen, was die Funktion zurückgibt und was sie als Parameter erwartet. Wozu brauchst du dann noch einen Funktions-Pointer? Dann kannst du ja gleich auf void (*) (void) casten und auf gut Glück aufrufen. 😃



  • Martin2000 schrieb:

    Ich habe folgendes Problem: 2 Funktionen sollen definiert werden:
    Funktion 1 hat als input-argument ein 'char', output-argument ist ein 'float'.
    Funktion 2 hat als input-argument ein 'int', als output-argument soll ein pointer zu einer funktion mit argumenten des typs 'Funktion 1' geliefert werden.

    Es heißt "Rückgabewert" und nicht "output-argument".

    Also

    typedef float func1_t(char);  
    
      float function1(char);
      func1_t* function2(int);
    

    Martin2000 schrieb:

    Mein Header sieht demnach so aus:

    float funct1(char);
    void* funct2(int);
    

    Diese funct2 macht aber nicht das, was Du wolltest. void hat hier schonmal gar nichts zu suchen.

    Martin2000 schrieb:

    Nun soll der pointer fp auf die Funktion 2 zeigen.
    Leider beschwert sich der Compiler über die Inkompatibilität des deklarierten Void-pointers für funktion 2.

    Zu Recht. Du musst Dich schon entscheiden, was Du willst. Wenn Du die Deklaration von funct2 beibehalten willst, musst Du den Funktionszeiger auch anders definieren:

    void*(*fp)(int) = funct2;  // Wenn ich mich nicht irre
    

    Gruß,
    SP


Anmelden zum Antworten