2015-02-19 2 views
-2

У меня вопрос о функции обработчика, я не могу понять, что это такое, и в коде нет объявления этой функции. У меня этот код в C modesReadFromClient(client *c, char *sep, int (*handler)(client *));C-C++ * обработчик Функция

Теперь я хочу использовать это в C++. В файле заголовок Я этот код -

void modesReadFromClient(client *c, char *sep, int (*handler)(client *)); 

И в исходном файле этого кода -

void MainWindow::modesReadFromClient(struct client *c, char *sep, 
        int(*handler)(struct client *)) 

Но я имею ошибку -

недопустимое использование нестатического член функция modesReadFromClient(c,"\n",HexMessage);

Я думаю, что что-то не так с int* handler. Как перевести этот код на C++?

+0

Можете ли вы отправить пожалуйста 'HexMessage'? –

+0

Я не думаю, что проблема связана с обработчиком обратного вызова, похоже, вы пытаетесь вызвать 'modesReadFromClient' без экземпляра' MainWindow'. Вам нужно что-то вроде «MainWindow m; m.modesReadFromClient (...); ' – Praetorian

+0

hexmessage - это функция – xmaze

ответ

2

Это просто указатель на функцию, вы можете позвонить по телефону handler() из функции modesReadFromClient();.

Декларация

int (*handler)(struct client *) 

делает handler указатель функции, вы можете назвать handler как этот

struct client *someClient; 
int   handlerResult; 
/* initialize someClient */ 
handlerResult = handler(someClient); 

Если у вас есть функция обработчика как этот

int handlerFunction(struct client *c) 
{ 
    /* do somthing with 'c' */ 
} 

затем вы можете позвонить по номеру

modesReadFromClient(c, "\n", handlerFunction); 
+0

не работает, если я сделал это правильно! – xmaze

+0

@xmaze Я не эксперт на C++, но вам нужны оба решения. –

+0

ОК, спасибо, но если вы хотите лучше посмотреть исходный код на https://github.com/antirez/dump1090/blob/master/dump1090.c Линия 2103 Линия 2295 – xmaze

0

Для вызова нестатической функции в C++ объявите экземпляр класса и вызовите функцию в этом экземпляре.

MainWindow mainWindow; 
mainWindow.modesReadFromClient(...); 
+0

doen't work too – xmaze

0

Я не могу найти решение для этого, и я стараюсь работать вокруг с QT и QtTcpsocket класса

Смежные вопросы