typedef void (*e_handler)(int,int);//указатель на функцию
class cl1
{
public:
void Expand(int, int);
};
class cl2
{
protected:
e_handler p_hand;//указатель на функцию
public:
void AddHandler(int event_id, cl1* subitem);
void Expand(int,int);
};
void cl2::AddHandler(int event_id, cl1* subitem)
{
// здесь нужно передать указателю p_hand
// 1. адрес член-функции Expand класса cl2, т.е this->Expand
// делаю так:
p_hand=Expand //или p_hand=this->Expand
// 2. адрес член-функции subitem->Expand;
// делаю так:
p_hand=subitem->Expand
. . . . .
}
Передача указателя на член-функцию
Код:
При попытке компиляции компилятор выдает ошибку. Полную формулировку не помню,
но смысл в том, что e_handler - это указатель на одиночную функцию.
А мне нужно передать указатель на член-функцию указателю на одиночную функцию.
Это два разных типа указателей.
И компилятор такую операцию присваивания не принимает и как раз и указывает в
формулировке ошибки, что мол типы функций разные и указатели у них разные.
Компилятор g++. Версию не помню, но он в дистрибе ASP Linux 10.
ну к UNIX программированию вопрос относиться постольку, поскольку... поэтому переезжаем.