C++ 参数类型不匹配(void*)

C++ 参数类型不匹配(void*),c++,multithreading,class,casting,C++,Multithreading,Class,Casting,所以我尝试使用pthread_create,但是我得到了 error: argument of type ‘void* (server::)(void*)’ does not match ‘void* (*)(void*)’ 该类定义如下: class server : public AL::ALModule { public: server(boost::shared_ptr<AL::ALBroker> pBroker, const std::string& pN

所以我尝试使用pthread_create,但是我得到了

error: argument of type ‘void* (server::)(void*)’ does not match ‘void* (*)(void*)’
该类定义如下:

class server : public AL::ALModule
{
  public:
  server(boost::shared_ptr<AL::ALBroker> pBroker, const std::string& pName);
  ....
  void *ThreadMain(void *arg);               
}
如何将ThreadMain从服务器::强制转换为*

提前谢谢

void *ThreadMain(void* arg)
应该是

static void ThreadMain(void* arg)
以及调用:

pthread_create(&threadID, NULL, &(server::ThreadMain), (void *) clntSock);
你正在创建的线程无法知道你的
指针是什么;C++试图通过让您认识到 theRealth是静态的,不能访问非静态属性。
使用
&(this->anyFunc)
的问题是
this
如果不是函数指针或虚函数,则没有对其方法的实际引用,方法本身也没有对相应的
this
的任何引用,除非它是由调用方(隐式)提供的

应该是

static void ThreadMain(void* arg)
以及调用:

pthread_create(&threadID, NULL, &(server::ThreadMain), (void *) clntSock);
你正在创建的线程无法知道你的
指针是什么;C++试图通过让您认识到 theRealth是静态的,不能访问非静态属性。


使用
&(this->anyFunc)
的问题是
this
如果不是函数指针或虚函数,则没有对其方法的实际引用,方法本身也没有对相应的
this
的任何引用,除非它是由调用方(隐式)提供的。

ThreadMain
是成员函数。如果你投下它,它不会做你认为它会做的事。如果函数需要访问类属性,则应将函数
设为static
,并将
this
作为参数传递。如果函数不需要访问成员属性,则只需将
ThreadMain
设为static,即可工作。@agbinfo在尝试将其作为参数传递时,我从'void*()(服务器&)获得了无效转换“对于‘void()(void)’Marwan,我看到您接受了一个不需要访问此
的答案,所以我假设您不需要它。如果您让我知道,我将添加一个可以访问对象的答案。@agbinfo我相信您的答案将对需要访问成员变量的具有类似问题的其他人有所帮助。
ThreadMain
是一个成员函数。如果你投下它,它不会做你认为它会做的事。如果函数需要访问类属性,则应将函数
设为static
,并将
this
作为参数传递。如果函数不需要访问成员属性,则只需将
ThreadMain
设为static,即可工作。@agbinfo在尝试将其作为参数传递时,我从'void*()(服务器&)获得了无效转换“对于‘void()(void)’Marwan,我看到您接受了一个不需要访问此
的答案,所以我假设您不需要它。如果您让我知道,我将添加一个可以访问对象的答案。@agbinfo我相信您的答案将对需要访问成员变量的具有类似问题的其他人有所帮助。是的。第一个是函数原型,第二个是指向一个void函数的指针。谢谢,看起来它已转换为服务器::*这仍然给了我一个错误:无法将参数“3”的“void*(server:*)(void*)”转换为“void*()(void)”,转换为“int pthread_create(pthread_t*,const pthread_attr_t*,void*(void*),void*)我试图避免使用静态函数,因为我想访问类的其他成员。有没有其他方法可以克服这个问题?老实说,我对
pthread
一无所知;我总是使用WinAPI CreateThread。如果我这样做的话,我可以在创建时将一个参数传递给线程,这就是你问题中的
this
。本质上,没有办法让C++理解线程过程是一个特定对象的方法,而不需要修改<代码> pthRead创建> /Cord>的原型,并且最好的办法是启动线程作为静态函数,然后从中调用对象方法。第一个是函数原型,第二个是指向一个void函数的指针。谢谢,看起来它已转换为服务器::*这仍然给了我一个错误:无法将参数“3”的“void*(server:*)(void*)”转换为“void*()(void)”,转换为“int pthread_create(pthread_t*,const pthread_attr_t*,void*(void*),void*)我试图避免使用静态函数,因为我想访问类的其他成员。有没有其他方法可以克服这个问题?老实说,我对
pthread
一无所知;我总是使用WinAPI CreateThread。如果我这样做的话,我可以在创建时将一个参数传递给线程,这就是你问题中的
this
。基本上,没有办法让C++理解线程过程是一个特定对象的方法,而不需要修改<代码> pthRead创建> /Cord>的原型,最好的办法是启动线程作为静态函数,然后从那里调用对象方法。