Я всегда определял свои обработчики событий следующим образом:
// A.h
class A
{
public:
A();
void someMethod();
void onEvent(void (*callback)(char *, int));
private:
typedef void (*MyEvent)(char *, int);
MyEvent _on_update_callback;
};
// A.cpp
void A::someMethod(){
if(condition){
if(NULL != _on_update_callback){
_on_update_callback(&"some message", 42);
}
}
}
void A::onEvent(void (*callback)(char *, int)){
if(NULL != callback){
_on_update_callback = callback;
}
}
И я использовал его из основного приложения следующим образом:
// main.cpp
#include "A.h"
A a;
int main(void){
a.onEvent(&eventHandler);
}
void eventHandler(char *text, int code){
// so something
}
Теперь мне нужно определить слушатель события A из класса B (вместо основного приложения).
// B.h
#include "A.h"class B
{
public:
B();
private:
A _a;
void _onEvent(char *text, int code);
};
// B.cpp
B::B(){
_a.onEvent(&_onEvent);
}
void B::_onEvent(char *text, int code){
// do something here
}
Но я получаю следующую ошибку:
ошибка: нет соответствующей функции для вызова ‘A :: onEvent (void (B :: *) (char *,
int)) ‘note: нет известного преобразования для аргумента 1 из’ void
(B :: *) (char *, int) ‘в’ void (*) (char *, int) ‘
Задача ещё не решена.