in einen Array einen Pointer auf eine Funktion übergeben



  • Hallo,

    ich habe mir eine Funktion geschrieben, die sowohl in einer Fensteranwendung wie auch in einer Konsolenanwendung Verwendung findet. Beim Aufruf der Funktion wird der Funktion eine Struktur übergeben. In dieser Struktur sind Informationen enthalten mit der die Funktion arbeiten muss. Da die Funktion eine Interaktion des Users erwartet, wird dann an einer Stelle eine Eingabe verlangt. In der Fensteranwendung ist es eine JA/NEIN Messagebox und in der Konsolenanwendung eine Unterfunktion die eine Konsoleneingabe erwartet. Um meine Hauptfunktion flexible zu gestalten, möcht ich diese UserInput Funktion in der Struktur mit übergeben z.B. so

    typedef struct _operation{
    	:
    	:
    	:
    	int		ErrorCode;
    	void		*UserInput;
    }operation_t;
    
    operation_t   op;
    

    wobei ich vor dem Aufruf *UserInput eine funktion zuweise. Das habe ich dann so gemacht

    void UserInteraktionfunktion(void){
    :
    :
    :
    }
    
    op.UserInput = (void *)UserInteraktionfunktion;
    
    void hauptfunktion(operation_t   *ptr_op){
    :
    :
    	ptr_op->UserInput;	//hier sollte eigentlich die Funktion aufgerufen werden
    :
    :
    }
    

    jedoch beibt das Proggy in der Zeile:

    ptr_op->UserInput;
    

    stehen. Leider kenne ich mich nicht so gut aus, warscheinlich mache ich etwas grundlegendes falsch, wer kann mir sagen wie es richtig geht?





  • _matze schrieb:

    Hilft das?
    http://www.willemer.de/informatik/cpp/fktzgr.htm

    Sorry ich raffs leider nicht, aber danke für die Mühe.
    😞



  • proggy noob schrieb:

    Sorry ich raffs leider nicht

    ist nicht schwer, lass deinen pointer in der struct einfach so aussehen:

    typedef struct _operation
    {
      void (*fp)(void);
      ...
    } operation_t;
    

    dann trägste die funktion ein:

    op.fp = UserInteraktionsfunktion;
    

    und so kannst du sie aufrufen:

    void hauptfunktion(operation_t   *ptr_op)
    {
        ptr_op->fp();
    ...
    

    🙂



  • @fricky+
    Super, danke für die Hilfestellung. Jetzt funktioniert es.


Anmelden zum Antworten