我是 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 指针。

就个人而言,如果您无法访问 C++11 实现,我会放弃 pthreads 以支持 C++11 std::threadboost::thread

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

10-11 23:15
查看更多