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(方法)时,我建议阅读此答案