我是 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)。
你们有没有人看到我做错了什么?
最佳答案
您正在使用成员函数指针,其中需要常规函数指针。成员函数有一个隐式的额外参数: this
。 pthread_create
没有考虑到这一点。
您必须使函数 static
能够与 pthread_create
一起使用。然后,您可以使用 void*
参数来传递 this
指针。
就个人而言,如果您无法访问 C++11 实现,我会放弃 pthreads 以支持 C++11 std::thread
或 boost::thread
。
关于c++ - 无法将 ‘void* (Network::*)(void*)’ 转换为 ‘void* (*)(void*)’,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14287942/