2012-02-20 19 views
6

ecco il codice:atteso ')' prima '*' token con puntatore a funzione

typedef struct { 
    void (*drawFunc) (void*); 
} glesContext; 

void glesRegisterDrawFunction(glesContext *glesContext, void(drawFunc*)(glesContext*)); 

Per questo ultima riga, ottengo il messaggio di errore: "Previsto ')' prima '*' token"

perché?

risposta

0

Si potrebbe provare a mettere tra parentesi: glesContext * glesContext.

0

Io non sono davvero sicuro di quello che il codice sta cercando di fare, ma se si desidera solo per rendere compilare, provare

void glesRegisterDrawFunction(glesContext *glesContext, void (*drawFunc)(glesContext*)); 
5

È hanno il modo corretto di fare un puntatore a funzione nella vostra struct (quindi complimenti per quello, così tante persone sbagliano).

Eppure hai invertito lo drawFunc e * nella definizione della tua funzione, che è uno dei motivi per cui il compilatore si lamenta. L'altro motivo è che hai lo stesso identificatore usato come tipo e variabile. Dovresti scegliere identificatori diversi per le due cose differenti.

Utilizzare questo invece:

void glesRegisterDrawFunction(glesContext *cntxt, void(*drawFunc)(glesContext*)); 
                 ^^^^^^^^^ 
                 note here 
5

Una soluzione è quella di aggiungere un puntatore a funzione typedef come segue: puntatori a funzione

typedef struct { 
    void (*drawFunc) (void*); 
} glesContext; 

// define a pointer to function typedef 
typedef void (*DRAW_FUNC)(glesContext*); 

// now use this typedef to create the function declaration 
void glesRegisterDrawFunction(glesContext *glesContext, DRAW_FUNC func); 
+4

Typedeffing possono renderli più facili da affrontare. – dreamlax

Problemi correlati