C++;将成员函数作为另一个成员函数的参数传递 Eclipse中使用Borland C++编译器有问题,我想把一个成员函数的地址传递给另一个类的构造函数,它是第一类< /P>的朋友。 PCB::PCB(Thread *t, long stack, int time, void (*method)())

C++;将成员函数作为另一个成员函数的参数传递 Eclipse中使用Borland C++编译器有问题,我想把一个成员函数的地址传递给另一个类的构造函数,它是第一类< /P>的朋友。 PCB::PCB(Thread *t, long stack, int time, void (*method)()),c++,class,C++,Class,我正在使用这个方法来查找FP_SEG和FP_OFF,但它在我编写时给了我错误 Thread::Thread (StackSize stackSize, Time timeSlice){ myPCB = new PCB(this, stackSize, timeSlice, run); } 这是我一直遇到的错误: 在函数Thread::Thread(unsigned long,unsigned int,void)中找不到“PCB::PCB(Thread*const,unsigned lo

我正在使用这个方法来查找
FP_SEG
FP_OFF
,但它在我编写时给了我错误

Thread::Thread (StackSize stackSize, Time timeSlice){
    myPCB = new PCB(this, stackSize, timeSlice, run);
}
这是我一直遇到的错误:

在函数Thread::Thread(unsigned long,unsigned int,void)中找不到“PCB::PCB(Thread*const,unsigned long,unsigned int,void)”的匹配项


虽然成员函数调用看起来像常规函数调用,但两者并不相同,因为将
this
指针传递到被调用的函数时涉及到编译器的技巧。当您从另一个成员函数调用成员函数时,C++为您填写<代码>此< /Cult>指针。这就是为什么成员函数与常规函数不兼容,而只有静态函数是不兼容的

如果需要将函数传递给未编写的API,则需要传递常规函数。否则,考虑更改代码以采用<代码> STD::函数< /C>,因为它与成员函数兼容。


有时,第三方C风格API支持为调用的“上下文”传递额外的参数。如果您的API也支持一个
void*
,那么您可以编写一个常规函数,将void指针强制转换回类的实例,并在该实例上调用成员函数。

虽然成员函数调用看起来像常规函数调用,但两者并不相同,因为将
这个
指针传递给被调用的函数涉及到编译器的技巧。当您从另一个成员函数调用成员函数时,C++为您填写<代码>此< /Cult>指针。这就是为什么成员函数与常规函数不兼容,而只有静态函数是不兼容的

如果需要将函数传递给未编写的API,则需要传递常规函数。否则,考虑更改代码以采用<代码> STD::函数< /C>,因为它与成员函数兼容。


有时,第三方C风格API支持为调用的“上下文”传递额外的参数。如果您的API也支持
void*
,则可以编写一个常规函数,将void指针投射回类的实例,并在该实例上调用成员函数。

void(*method)(
不是成员函数指针。但是当我添加(线程::*方法)FP_OFF(方法)时不再有效我建议阅读此答案
void(*method)(
不是成员函数指针。但是当我添加(线程::*方法)FP_OFF(方法)时,我建议阅读此答案