有一些代码
class TT {
public:
void set();
void par1(int, int);
void par2(double, double);
};
typedef void(*Ptr1)(TT &, int, int);
typedef void(*Ptr2)(TT &, double, double);
void hello(Ptr1, Ptr2){...}
void TT::set()
{
hello(&TT::par1, &TT::par2);
}
,错误显示:
error C2664: 'hello' : cannot convert parameter 1 from 'void (__thiscall TT::* )(int,int)' to 'Ptr1'
请告诉我如何解决这个问题?
答案 0 :(得分:3)
你想这样做
typedef void(TT::*Ptr1)(int, int);
typedef void(TT::*Ptr2)(double, double);
并修复hello函数以获取指向this
的指针,因为您需要使用this指针来调用对象上的函数。
void hello(TT* obj,Ptr1 x, Ptr2 y){
(obj->*x)(1,2);
}
检查this post以获取有关成员函数指针的更多信息。