Реализация обработчика событий в переполнении стека

Я всегда определял свои обработчики событий следующим образом:

// 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) ‘

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]