С ++ Синтаксис указателя на функцию - PullRequest
0 голосов
/ 03 августа 2010

Я пытаюсь создать функцию в VC ++, которая принимает указатель на функцию, но я получаю синтаксические ошибки.

Объявление в моем заголовочном файле выглядит так:

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

Вот определение:

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

А вот сообщения об ошибках, которые я получаю:

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

Я знаю, что, возможно, что-то очень простое, что мне не хватает, но я не могу понять это.

Ответы [ 3 ]

9 голосов
/ 03 августа 2010

Обычно хорошей идеей является определение typedef для вашего типа указателя на функцию.Это помогает использовать его в последующих декларациях и избавляет от необходимости менять его дважды, когда вы пишете ошибку.Здесь вы ставите звездочку с изнаночной стороны CSpreadWnd.

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

и определения:

void CSpreadWnd::ApplyFuncToCellsInSelection(MyFuncPtr func) { ... }
6 голосов
/ 03 августа 2010

У вас звездочка не на той стороне CSpreadWnd:

void ApplyFuncToCellsInSelection(void(*func)(CPoint, CSpreadWnd*));
                                 the asterisk needs to go here ^
4 голосов
/ 03 августа 2010

Указатель CSpreadWnd выглядит забавно.Похоже, это должно быть CSpreadWnd*, а не *CSpreadWnd.

...