为什么我不能用这个其他类的函数填充这个类的函数指针

Fra*_*era 1 c++ pointers function-pointers class

现在一个类的函数指针到另一个类的函数怎么样?那是我的问题

例:

class Apple
{
   int(Apple::*pActionFunc)(void);
};

class Tree
{
   Apple* tempy;

   void Init( void );

   int I_Work( void );
};

void Tree::Init( void )
{
  tempy = new Apple( );
  tempy->pActionFunc = &Tree::I_Work;
}

int Tree::I_Work( void )
{
   "Do Things"
}
Run Code Online (Sandbox Code Playgroud)

那样不行.这是为什么?

Alo*_*ave 5

这不起作用,因为像所有变量一样,函数指针也有一个类型,你只能使用指向同一类型的指针来存储变量类型的地址.

int(Apple::*pActionFunc)(void); 
Run Code Online (Sandbox Code Playgroud)

告诉编译器这pActionFunc是一个指向Apple类成员函数的指针,它void作为参数并返回一个int.

tempy->pActionFunc = &Tree::I_Work;
Run Code Online (Sandbox Code Playgroud)

尝试存储作为类的I_Work()成员的函数的地址,该函数作为输入参数并返回.Treevoidint

如果您注意到它们是不同类的成员函数,那么就是错误.