我是一名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)
我将头文件中的两个函数声明为私有.
你们有没有看到我做错了什么?
您正在使用成员函数指针,其中需要常规函数指针.一个成员函数有一个隐含的额外的参数:this.pthread_create没有考虑到这一点.
您必须使该功能static能够与其一起使用pthread_create.然后,您可以使用该void*参数传递this指针.
就个人而言,我会抛弃pthreads而不是C++ 11 std::thread,或者boost::thread如果你无法访问C++ 11实现.