gpt4 book ai didi

c++ - 无法将 ‘void* (Network::*)(void*)’ 转换为 ‘void* (*)(void*)’

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:14 26 4
gpt4 key购买 nike

我是一名初级 C++ 程序员,我正在 Linux 机器上编程。

我遇到了这个错误:

cannot convert ‘void* (Network::*)(void*)’ to ‘void* (*)(void*)’ for argument ‘3’ to ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)

它来自这条线:

pthread_create(&thread_id,0,&Network::SocketHandler, (void*)csock );

我要调用的函数是:

void* Network::SocketHandler(void* lp)

我在头文件中将这两个函数都声明为私有(private)的。

你们有没有看到我做错了什么?

最佳答案

您正在使用一个成员函数指针,而应该是一个常规的函数指针成员函数 有一个隐含的额外参数:thispthread_create 没有考虑到这一点。

您必须使函数static 才能与pthread_create 一起使用。然后,您可以使用 void* 参数传递原本是 this 的指针。

就个人而言,我会放弃 pthreads,转而使用 C++11 std::threadboost::thread 如果您无权访问 C++11 实现。

关于c++ - 无法将 ‘void* (Network::*)(void*)’ 转换为 ‘void* (*)(void*)’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287942/

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