The buttom of the problem is this: You excpect libpcap to call X::dumper in the context of an instance of class X. (The "real" first parameter of "X::dumper" is a variable named "this" of the type "X*".)
But the libpcap API is not defining a >`void (X::)(u_char*, const pcap_pkthdr*, const > u_char*)' Just a > void (*)(u_char*, const pcap_pkthdr*, const > u_char*) Which is what the compiler is telling you. Therefore, you cannot pass a non-static member function to libpcap. You can make dumper() a static member. --- David Rosal <[EMAIL PROTECTED]> wrote: > Hello. > > I'm writing a packet sniffer in C++ using > libpcap-0.9.4. > > I've tried to use a class function member as a > callback for > pcap_loop(), but the compiler complains that > arguments don't > match. The code is something like this (I have > simplified it): > > 8<----------------------------- > > class X > { > public: > // This is the callback, defined below > void dumper(u_char *u, const struct > pcap_pkthdr *h, > const u_char *p); > }; > > > void X::dumper(u_char *u, const struct > pcap_pkthdr *h, const > u_char *p) > { > // stuff... > pcap_dump(blah, blah, blah); > } > > > int main() > { > X x; > > // Open pcap, etc... > > pcap_loop(p, -1, x.dumper, 0); > } > > ----------------------------->8 > > And g++ says this: > > In function `int main()': > sniffer.cc:645: error: argument of type `void > (X::)(u_char*, > const pcap_pkthdr*, const u_char*)' does not > match `void > (*)(u_char*, const pcap_pkthdr*, const > u_char*)' > > This is not a warning but an error, so I cannot > compile the program. > > Is there any trick to fix this? Am I missing > something? > > Should I avoid C++ and use C instead (don't say > that please...) > > > Thanks. > > > __david > - > This is the tcpdump-workers list. > Visit https://lists.sandelman.ca/ to > unsubscribe. > --ury - This is the tcpdump-workers list. Visit https://lists.sandelman.ca/ to unsubscribe.