尝试编写一些简单的多线程服务器程序并最近遇到了该错误:
Server.cpp:64:64: 错误: 'void* (Server::)(void*)' 类型的参数不匹配'void* (*)(无效*)
这是我的代码中的一些行:
头文件:
class Server
{
public:
void establishConnection(const char * );
...
private:
void *listening(void *);
void *acceptingConnection(void *);
pthread_attr_t attrr;
}
cpp文件:
void Server:: establishConnection(const char *port_number )
{
...
pthread_create(&listn, &attrr, Server::listening, (void*)socketfd);//pthread_t listn, socketfd is a socket destricptor(int)
pthread_join(listn, NULL);
}
void* Server::listening(void *arg)
{
int socketfd = (int)arg;
...
}
通常,如果我在 cpp 文件而不是头文件中定义线程函数原型,它可以正常工作(当然没有 Server:: 定义)尝试了其他一些东西,例如 (void*)Server::listening、listening、(void*)listening但仍然没有工作。你能启发我吗?如何将方法参数传递给监听方法?
其次,我目前正在学习c++(已经知道C),在c++程序中使用一些C方法,char*数组而不是字符串,头文件是真的吗?比如string.h、stdlib.h、pthread.h?