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

标签 c++ class pointers function-pointers

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

例子:

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"
}

那是行不通的。这是为什么?

最佳答案

这行不通,因为像所有变量一样,函数指针也有类型,您只能使用指向相同类型的指针来存储变量类型的地址。

int(Apple::*pActionFunc)(void); 

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

tempy->pActionFunc = &Tree::I_Work;

尝试存储函数 I_Work() 的地址,该函数是 Tree 类的成员,该类以 void 作为输入参数并返回一个 int

如果您注意到它们是不同类的成员函数,因此会出现错误。

关于c++ - 为什么我不能用这个其他类的函数来填充这个类的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9035135/

相关文章:

c++ - 如何修复错误 "other computer the program can' t start because libgcc_s_dw2-1.dll is missing from your computer“在其他计算机上

c++ - 运行 "optimization=Enable"时停止 Visual Studio 移动我的断点

c++ - 定义包含彼此指针的类

c++ - 类和类型的问题

c++ - 如何检查传递给可变参数函数的参数类型

c++ - 关于运行良好的堆栈 RPN 程序上的 char/int

ios - 将新项目 append 到 Swift 2.0 中的类数组

pointers - 为什么带有指针接收器的方法在接收到值时仍然有效?

C++ 从指针 vector 中删除

c++ - 指针表达式 : *ptr++, *++ptr 和++*ptr