Посмотрите, куда указывает ошибка. Могу поспорить, что дело не в строке объявления функции, а в том, как вы ее называете.
Обратите внимание:
struct foo
{
void bar(void (foo::*func)(void));
void baz(void)
{
bar(&foo::baz); // note how the address is taken
bar(&baz); // this is wrong
}
};
Вы получаете ошибку, потому что вызываете функцию неправильно. Учитывая мой foo
выше, мы знаем, что это не сработает:
baz(); // where did the foo:: go?
Поскольку baz
требует вызова экземпляра. Вы должны дать ему один (я предполагаю this
):
std::cout << (this->*f1)(ac);
Синтаксис немного странный, но этот оператор ->*
говорит: «возьмите указатель на функцию-член справа и вызовите его с экземпляром слева». (Существует также оператор .*
.)