void foo(int);
void (*pfunc)(double);
pfunc = foo; // This is an error
Почему это ошибка?Потому что pfunc принимает другой параметр, чем foo.Это то же самое, что здесь происходит.Может показаться, что Tree::I_Work
- это функция, которая не принимает параметров и возвращает int, поэтому она должна быть совместимой с функцией Apple, которая не принимает параметров и возвращает int.Но это не так.Вы не можете позвонить в I_Work следующим образом:
x = I_Work();
Можете ли вы?Нет. Вам нужен объект Tree.
a_tree.I_Work();
Это должно понять, что функции-члены принципиально отличаются от свободных функций.Функции-члены имеют скрытый параметр.На самом деле, это не совсем скрыто, просто в другом месте.Он находится слева от имени функции, а не в скобках.
Таким образом, чтобы подвести итог, вы не можете назначить указатель функции-члена одного класса на функцию-член другого класса, посколькуте же аргументы, даже если они кажутся.