使用libpcap和c ++构建错误pcap_loop

时间:2012-04-01 23:30:18

标签: c++ libpcap

您好我正在使用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 *)} '

我不明白错误,因为声明是一样的,任何人都可以帮助我吗?

感谢。

2 个答案:

答案 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多实例“回调”模式。