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
funct2macht aber nicht das, was Du wolltest.voidhat 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
funct2beibehalten willst, musst Du den Funktionszeiger auch anders definieren:void*(*fp)(int) = funct2; // Wenn ich mich nicht irreGruß,
SP