Funktion über Zeiger aufrufen - char und Funktion mag nich
-
Hoi,
So hab mich heute Abend hingesetzt um mal wieder was zu programmieren...
Und das hat auch recht gut geklappt bis ich zu den Funktions Zeigern(Pointern) gekommen will.
Denn ich versuche derzeit einen simple Callbackfunktion zu schreibenMein Wissenstand: niedrig (ich armer noob bitte helft mir ^^)
Ziel: Ich will eine Funktion die über eine string einen andere Funktion aufruft..
Bsp.
Funktion die ausgeführt werden soll:int funktion1(char *arg1) { /* Source usw...... */ return 0; }
Funktion die die andere Funktion ausführen soll:
int run_funktion(char *name_der_funktion, char *arg) { int (*funktion)(char *funktion_arg); int rueckgabe_der_funktion; funktion=name_der_funktion; rueckgabe_der_funktion = (*funktion)(arg); return rueckgabe_der_funktion; }
Und die main die alles aufruft:
int main() { /* Source usw...... */ char *name = "funktion1"; char *arg = "test1234"; int wert_funktion = run_funktion(name,arg); return 0; }
Hab das ganze in einem etwas ausführlicheren Code, aber mein Problem beschränkt sich auf folgendes:
gcc sagt mir nämlich folgendes beim compilieren:
joogi@hihi:~/Desktop/proggn/$ gcc test.c -o test
test.c: In Funktion »run_cmd«:
test.c:28: Warnung: Zuweisung von inkompatiblem ZeigertypTja also stimmt was mit meiner Zuweisung von dem string zu der Funktion nicht.
Also hier:funktion=name_der_funktion; rueckgabe_der_funktion = (*funktion)(arg);
Ich weis jetzt auch nicht wie ich noch besser beschreiben könnte aber ich hoffe das damit schon jemand was anfangen und mir helfen kann.
Joogi
-
Tja man kann halt keine char* in int ()(char) verwandeln. Klingt logisch oder?
-
joogi schrieb:
int run_funktion(char *name_der_funktion, char *arg) { int (*funktion)(char *funktion_arg); int rueckgabe_der_funktion; funktion=name_der_funktion; rueckgabe_der_funktion = (*funktion)(arg); return rueckgabe_der_funktion; } int main() { /* Source usw...... */ char *name = "funktion1"; char *arg = "test1234"; int wert_funktion = run_funktion(name,arg); return 0; }
mach in 'run_funktion' die zeile
funktion=name_der_funktion;
zu
funktion=(int(*)(char*))name_der_funktion;
und in 'main'
char *name = "funktion1";
zu
char *name = (char*)funktion1;
:xmas2:
-
Das ist doch murks .. da kann er besser gleich
int run_funktion(int (*funktion)(char *funktion_arg), char *arg) { }
verwenden.
-
feigling schrieb:
Das ist doch murks ..
stimmt