rob
rob

Reputation: 18523

C++ Function Pointer Syntax

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.

Upvotes: 0

Views: 3626

Answers (3)

Didier Trosset
Didier Trosset

Reputation: 37487

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) { ... }

Upvotes: 9

cHao
cHao

Reputation: 86585

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

Upvotes: 4

James McNellis
James McNellis

Reputation: 355357

You have the asterisk on the wrong side of CSpreadWnd:

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

Upvotes: 6

Related Questions