Указатель на функцию-член имеет следующую форму:
R (C::*Name)(Args...)
Где R
- это тип возвращаемого значения, C
- это тип класса, а Args...
- любые возможные параметры функции (или нет).
С этим знанием ваш указатель должен выглядеть так:
void (golu::*t)() = &golu::man;
Обратите внимание на пропущенный ()
после функции-члена. Это попыталось бы вызвать указатель на функцию-член, который вы только что получили, и это невозможно без объекта.
Теперь это становится намного более читабельным благодаря простому typedef:
typedef void (golu::*golu_memfun)();
golu_memfun t = &golu::man;
Наконец, вам не нужен указатель на объект для использования функций-членов, но вам нужна скобка:
golu m;
typedef void (golu::*golu_memfun)();
golu_memfun t = &golu::man;
(m.*t)();
Скобки важны, потому что оператор ()
(вызов функции) имеет более высокий приоритет (также называемый приоритет ), чем оператор .*
(и ->*
).