我有一个类SFAPin,有一种方法:
SFAPin::addListener(void (*)(SFAPinEvent&), uint8_t){};
但是当我尝试为此方法传递另一个类的一个方法时:
void InitialState::lightChange(SFAPinEvent &event){};
light.addListener(&this->lightChange, SFAPinEvent:PIN_CHANGE);
我得到了:
错误:没有匹配函数来调用'SFAPin :: addListener(void(InitialState :: *)(SFAPinEvent&),uint8_t)'
注意:候选者是:void SFAPin :: addListener(void(*)(SFAPinEvent&),uint8_t)
如果lightChange是静态方法,则可以正常使用:
light.addListener(lightChange, SFAPinEvent:PIN_CHANGE);
但我不想要静态方法
我该如何解决? 感谢
答案 0 :(得分:0)
参数addListener()
期望的是指向函数的指针。您传入的参数是指向成员函数的指针。您可以通过传递函数或添加一个方法来解决此问题,该方法需要指向成员函数的指针
SFAPin::addListener(void (InitialState::*)(SFAPinEvent&), uint8_t)
但是,你还必须添加一个对象指针,它可以与给定的方法一起使用,可能就像
SFAPin::addListener(InitialState &state, void (InitialState::*)(SFAPinEvent&), uint8_t)
答案 1 :(得分:0)