gpt4 book ai didi

c++ - 将私有(private)方法类成员作为指向函数的指针传递

转载 作者:行者123 更新时间:2023-11-28 07:08:33 24 4
gpt4 key购买 nike

我在论坛中进行了搜索,并尝试了在这里找到的几种解决方案,但都没有奏效。我的问题是,我需要将一个类的私有(private)成员作为指向函数参数的指针传递,所以我尝试将此方法作为静态方法,但它不起作用,请遵循代码。

  class monitor {
public:
monitor(device *dev);
...
void exec();
void end();
virtual ~monitor();

private:
static pcap_handler process_packet(u_char *arg, const struct pcap_pkthdr* pkthdr,
const u_char * packet);
static void thread_func(monitor *mon);
device *dev;
};

以及如何使用该方法:

void monitor::exec() {
std::thread t (monitor::thread_func, this);
}

void monitor::thread_func(monitor *mon) {
pcap_loop(mon->dev->get_descr(), -1, monitor::process_packet, reinterpret_cast<u_char*>(mon)); // error in this line
}

pcap_handler monitor::process_packet(u_char *arg, const struct pcap_pkthdr* pkthdr,
const u_char * packet) {
monitor *mon = reinterpret_cast<monitor*>(arg);

...
}

错误是:

error: invalid conversion from ‘void (* (*)(u_char*, const pcap_pkthdr*, const u_char*))(u_char*, const pcap_pkthdr*, const u_char*) {aka void (* (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*))(unsigned char*, const pcap_pkthdr*, const unsigned char*)}’ to ‘pcap_handler {aka void (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*)}’ [-fpermissive]

error: initializing argument 3 of ‘int pcap_loop(pcap_t*, int, pcap_handler, u_char*)’ [-fpermissive]

遵循 libpcap 函数原型(prototype)的代码

typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes);

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);

我尝试了其他帖子中解释的几种解决方案:

pthread in a class

Private member function that takes a pointer to a private member in the same class

C++: Calling member function via pointer

Function pointer to class member function problems

但是这些帖子都没有解决我的问题,那么,有人有什么提示吗?

谢谢...

最佳答案

process_packet 是一个返回 pcap_handler 的函数。它不是 pcap_handler

要使其成为 pcap_handler,请将其行更改为:

static void process_packet(u_char *arg, const struct pcap_pkthdr* pkthdr,
const u_char * packet);

关于c++ - 将私有(private)方法类成员作为指向函数的指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21394791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com