2010-08-03 10 views
0

J'essaye de créer une fonction dans VC++ qui prend un pointeur de fonction mais je continue d'obtenir des erreurs de syntaxe.C++ Fonction Pointer Syntaxe

La déclaration dans mon dossier d'en-tête ressemble à ceci:

void ApplyFuncToCellsInSelection(void(*func)(CPoint, *CSpreadWnd)); 

Voici la définition:

void CSpreadWnd::ApplyFuncToCellsInSelection(void(*func)(CPoint, *CSpreadWnd)) { ... } 

Et voici les messages d'erreur que je reçois:

c:\...\spreadwnd.h(274) : error C2059: syntax error : 'function-style cast' 
c:\...\spreadwnd.h(274) : error C2059: syntax error : ')' 
c:\...\spreadwnd.h(274) : error C2143: syntax error : missing ')' before ';' 

Je sais que c'est probablement quelque chose de vraiment simple qui me manque mais je n'arrive pas à le comprendre.

+1

Vous devriez probablement envisager d'utiliser la fonction boost :: ou std :: fonction, si l'est à votre disposition. Ils sont beaucoup plus faciles à utiliser et à lire. –

Répondre

8

Il est généralement recommandé de définir un typedef pour le type de pointeur de fonction. Il aide à l'utiliser dans d'autres déclarations, et évite d'avoir à le changer deux fois quand vous écrivez une erreur. Ici, vous mettez l'astérisque sur le mauvais côté de CSpreadWnd.

typedef void (*MyFuncPtr)(CPoint, CSpreadWnd*); 
void ApplyFuncToCellsInSelection(MyFuncPtr func); 

Et définition:

void CSpreadWnd::ApplyFuncToCellsInSelection(MyFuncPtr func) { ... } 
6

Vous avez l'astérisque sur le mauvais côté de CSpreadWnd:

void ApplyFuncToCellsInSelection(void(*func)(CPoint, CSpreadWnd*)); 
           the asterisk needs to go here^
4

Le pointeur CSpreadWnd semble drôle. Il semble que ce devrait être CSpreadWnd* plutôt que *CSpreadWnd.