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 initializer

    Wie initialisiere ich die Tabelle?



  • Fehlermeldung:
    error (dcc:1089): illegal initializer

    Es 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.


Log in to reply