views:

115

answers:

3

I am trying to create a function in VC++ that takes a function pointer but I keep getting syntax errors.

The declaration in my header file looks like this:

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

Here is the definition:

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

And here are the error messages I'm getting:

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 ';'

I know its probably something really simple that I'm missing but I can't seem to figure it out.

+6  A: 

You have the asterisk on the wrong side of CSpreadWnd:

void ApplyFuncToCellsInSelection(void(*func)(CPoint, CSpreadWnd*));
                                 the asterisk needs to go here ^
James McNellis
+4  A: 

The CSpreadWnd pointer looks funny. It looks like it should be CSpreadWnd* rather than *CSpreadWnd.

cHao
+8  A: 

It's usually a good idea to define a typedef for your function pointer type. It helps using it in further declarations, and avoids having to change it twice when you write an error. Here, you put the asterisk on the wrong side of CSpreadWnd.

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

And definition:

void CSpreadWnd::ApplyFuncToCellsInSelection(MyFuncPtr func) { ... }
Didier Trosset