2

我有一类 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

我该如何解决?谢谢

4

1 回答 1

1

指向派生成员的指针不能转换为指向基成员的指针。如果是这样,你可以做一些(baseInstance.*methodOfDerived)()没有意义的事情。协方差反过来:你可以获取一个指向 base 成员的指针,并在派生的实例上调用它。

目前尚不清楚您要实现的目标,但是您当前的方法不会奏效。你需要重新考虑你的设计。

于 2013-07-26T21:54:34.210 回答