Потому что пока ваша функция - член класса, она имеет не тип void(*)(), а вовсе даже void(A::*)(). А это совсем-совсем другая история.
Нестатической функции передается скрытый параметр - ссылка на объект, для которого она вызывается.
class A
{
public:
A() {};
~A(){};
void boo(){};
struct func {
std::string function_name; /* function name */
void(A::*p)(); /* pointer to the function */
};
func my_func[1] = {
{ "boo",&A::boo }
};
};
Как вызвать? ну, например, так:
A a, b;
(a.*b.my_func[0].p)();
Вызов функции-члена, внесенной в первый элемент массива my_func объекта b, для объекта a.
На очередной вопрос:
class A
{
public:
A() {};
~A(){};
void boo(){ cout << "boo\n"; };
struct func {
std::string function_name; /* function name */
void(A::*p)(); /* pointer to the function */
};
func my_func[1] = {
{ "boo",&A::boo }
};
void zoo()
{
(this->*my_func[0].p)();
}
};
Что еще прикажете написать? Или заодно приехать и полы помыть?...