我有一个类SFAPin,有一种方法:
SFAPin::addListener(void (SFAState::*)(SFAPinEvent&), uint8_t){};
但是当我尝试为此方法传递另一个类的一个方法时:
void InitialState::lightChange(SFAPinEvent &event){};
...
light.addListener(&lightChange, SFAPinEvent::PIN_CHANGE);
我得到了:
错误:没有匹配函数来调用'SFAPin :: addListener(void(InitialState :: *)(SFAPinEvent&),uint8_t)' 注意:候选者是:void SFAPin :: addListener(void(SFAState :: *)(SFAPinEvent&),uint8_t) Obs:InitialState扩展SFAState,但不起作用
我正在使用arduino IDE并且不支持C ++ 11的lambda
我该如何解决? 感谢
答案 0 :(得分:1)
指向derived成员的指针不能转换为指向base成员的指针。如果是的话,你可以做(baseInstance.*methodOfDerived)()
这样没有意义的事情。协方差反过来说:你可以指向base的成员,并在派生的实例上调用它。
目前还不太清楚你想要实现的目标,但你目前的方法并不会成功。你需要重新考虑你的设计。