错误 "Conversion to non-scalar type requested"
Error "Conversion to non-scalar type requested"
我正在尝试实现一个带有线程池的多线程服务器并使用 select,所以我全局声明了 fd_set set
我传递给线程池 [=20] 的函数=] 得到这个错误
In function ‘threadF’ conversion to non-scalar type requested
fd_set set1=(fd_set) s;
代码是这样的
pool *createPool(int size){
/*...*/
if((err=pthread_create(&id,NULL,&threadF,(void *)&set))!=0){
fprintf(stderr,"thread\n");
exit(errno);
}
/*...*/
}
void *threadF(void* s){
fd_set set1=(fd_set) s;
/*...*/
}
也许我忘记了什么?
标量类型是算术类型(常规变量)和指针的正式名称。与之相反的是聚合类型,也就是数组和结构体。编译器认为您正在将标量 s
转换为其他值。用简单的英语来说:不要从指针转换为结构实例。
标量 s
是一个指针,但您将其转换为结构类型,而不是指向结构的指针(这是您传递给 pthread_create 的指针)。尝试:
fd_set* set1 = (fd_set*)s;
我正在尝试实现一个带有线程池的多线程服务器并使用 select,所以我全局声明了 fd_set set
我传递给线程池 [=20] 的函数=] 得到这个错误
In function ‘threadF’ conversion to non-scalar type requested fd_set set1=(fd_set) s;
代码是这样的
pool *createPool(int size){
/*...*/
if((err=pthread_create(&id,NULL,&threadF,(void *)&set))!=0){
fprintf(stderr,"thread\n");
exit(errno);
}
/*...*/
}
void *threadF(void* s){
fd_set set1=(fd_set) s;
/*...*/
}
也许我忘记了什么?
标量类型是算术类型(常规变量)和指针的正式名称。与之相反的是聚合类型,也就是数组和结构体。编译器认为您正在将标量 s
转换为其他值。用简单的英语来说:不要从指针转换为结构实例。
标量 s
是一个指针,但您将其转换为结构类型,而不是指向结构的指针(这是您传递给 pthread_create 的指针)。尝试:
fd_set* set1 = (fd_set*)s;