无法将'void*(Network ::*)(void*)'转换为'void*(*)(void*)'

mjc*_*jcs 4 c++ void

我是一名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*)
Run Code Online (Sandbox Code Playgroud)

它来自这条线:

pthread_create(&thread_id,0,&Network::SocketHandler, (void*)csock );
Run Code Online (Sandbox Code Playgroud)

我试图调用的函数是:

void* Network::SocketHandler(void* lp)
Run Code Online (Sandbox Code Playgroud)

我将头文件中的两个函数声明为私有.

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

K-b*_*llo 6

您正在使用成员函数指针,其中需要常规函数指针.一个成员函数有一个隐含的额外的参数:this.pthread_create没有考虑到这一点.

您必须使该功能static能够与其一起使用pthread_create.然后,您可以使用该void*参数传递this指针.

就个人而言,我会抛弃pthreads而不是C++ 11 std::thread,或者boost::thread如果你无法访问C++ 11实现.

  • @ user1971401是的它要好得多,只需在谷歌上查找C++ 11的`std :: thread`. (2认同)