Я пытаюсь использовать функцию pcap_loop в libpcab библиотеке в Linux с этим прототипом:обратного вызова в pcap_loop
int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
pcap_pkthdr является функцией указателя:
typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *);
В моей программе, у меня есть определен следующий метод в классе SniffEthernet:
void SniffEthernet::got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
Теперь призывающую pcap_loop, как показано ниже
pcap_loop(handle, num_packets, this->got_packet, NULL);
дает мне ошибку следующее время компиляции:
SniffEthernet.cc:139:58: error: cannot convert ‘VENTOS::SniffEthernet::got_packet’ from type ‘void (VENTOS::SniffEthernet::)(u_char*, const pcap_pkthdr*, const u_char*) {aka void (VENTOS::SniffEthernet::)(unsigned char*, const pcap_pkthdr*, const unsigned char*)}’ to type ‘pcap_handler {aka void (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*)}’
Что я делаю неправильно здесь?
Редактировать: Я нашел аналогичный пост here.
Удивительный ответ. Вызов reinterpret_cast в вызове pcap_loop() имеет неуправляемый оператор разыменования, но не работает этот код. –