您好我正在使用c ++和libpcap。当我尝试调用函数“mycallback”时,我得到了一个构建错误。 这些是功能:
void Capture::mycallback (unsigned char * useless, const struct pcap_pkthdr *pkthdr, const unsigned char * packet){
[...]
}
以及对函数的调用:
void Capture::capturar(){
[...]
pcap_loop (descr, -1, mycallback, NULL); //entramos en el bucle (infinito)
}
这就是错误:
error: argument of type 'void (Capture ::) (unsigned char *, const pcap_pkthdr *, const unsigned char *)' does not match '{aka pcap_handler void (*) (unsigned char *, const pcap_pkthdr *, const unsigned char *)} '
我不明白错误,因为声明是一样的,任何人都可以帮助我吗?
感谢。
答案 0 :(得分:2)
您的回电是类成员功能。在大多数平台上,您可以使用static
类成员函数,但理想情况下您应该只使用常规函数。如果需要对该类进行特殊访问,则可以将该函数设为该类的friend
。
错误确实证明了这一点:
...'void( Capture :: )(unsigned char *,const pcap_pkthdr ...不匹配'{aka pcap_handler void(*)(unsigned ...
注意Capture ::
出现在'不匹配'的左侧而不是右侧?每当你收到这样的错误时,比较双方,看看有什么不同。
答案 1 :(得分:1)
声明一个单独的全局函数capture_callback_handler(或静态类函数):
void capture_callback_handler(unsigned char * user, const struct pcap_pkthdr *pkthdr, const unsigned char * packet)
{
((Capture*) user)->mycallback(user, pkthdr, packet);
}
然后像这样调用pcap_loop:
Capture* pCapture = this;
pcap_loop (descr, -1, capture_callback_handler, (u_char*) pCapture);
这是标准的C多实例“回调”模式。