Pointer auf Funktionen mit unterschiedlichen Rückgabewerten
-
Hallo zusammen,
ich hab eine Frage zu Funktionspointern:Ich möchte mir eine Table machen, in der ich verschiedene Werte ablege, unter anderem einen Funktionspointer für eine "Get"-Funktion. Mein Problem ist, das diese Get Funktion verschiedene Rückgabewerte haben kann, siehe Bsp.:
typedef struct { byte Name; word Anzahl_der_Bewohner; Adresstyp (*GetAdresseFunction) (word y_uw); }Adressen; const Adressen AdressTable[]= { /* USA */ { Schmidt, 5 USA_Adressformat Get_USA_Adresse(name) }, /* Europa */ { Meier, 10, Europa_Adressformat Get_Europa_Adresse(name) }, /* Asien */ { Wong, 30, Asien_Adressformat Get_Asien_Adresse(name) } };
Ist es prinzipiell in C überhaupt möglich? Wie sähe die Syntax dazu aus?
Vielen Dank für eure Hilfe.
-
Dafür gibt es void*
-
Leider hab ich noch syntaktische Fehler:
typedef struct { byte Name; word Anzahl_der_Bewohner; void* (*GetAdresseFunction) (word y_uw); }Adressen; const Adressen AdressTable[]= { /* USA */ { Schmidt, 5 *(USA_Adressformat*) Get_USA_Adresse }, /* Europa */ { Meier, 10, *(Europa_Adressformat*) Get_Europa_Adresse }, /* Asien */ { Wong, 30, *(Asien_Adressformat*) Get_Asien_Adresse } };
Fehlermeldung:
error (dcc:1089): illegal initializerWie initialisiere ich die Tabelle?
-
Fehlermeldung:
error (dcc:1089): illegal initializerEs wäre schön wenn du die Zeile in der der Fehler auftritt mit angeben würdest.
Und zwar für den Quelltext den du hier postest.Einfach mal geraten: Der Compiler kann nichts mit Schmidt, Meier und Wong anfangen.
-
Dein Cast ist falsch. Der Typ von GetAdresseFunction ist eher sowas wie
void*(*)(word)
Erst wenn du die Funktion rufen willst brauchst du:
USA_Adressformat * address = (USA_Adressformat*)AdressTable[0].GetAdresseFunction(wert);
Ich hab das jetzt nicht auf Vollständigkeit/Richtigkeit geprüft. Aber müsste so stimmen. Ich würde mir noch einen typedef auf den Funktionszeiger machen.