error: invalid conversion from ‘int (*)(void*)’ to ‘void* (*)(void*)’
error: invalid conversion from ‘int (*)(void*)’ to ‘void* (*)(void*)’
我正在尝试生成 pthreads 并发送一个整数作为参数,但是在将参数转换为 void 时出现以下错误。我试图删除 (void*) 并隐式转换,但我仍然遇到相同的错误
error: invalid conversion from ‘int (*)(void*)’ to ‘void* (*)(void*)’ [-fpermissive]
rc=pthread_create(&threads[i],NULL,probSAT, (void *)&threads_args[i]);
void Solver::p(char** argc)
{
argvp=argc;
pthread_t threads[NTHREADS];
int threads_args[NTHREADS];
int i=0;
int rc;
for(i=0;i<5;i++)
if(order_heap.empty())
v[i]=i+1;
else
v[i]=(order_heap.removeMin())+1;
for (i=0;i<32;i++)
{
threads_args[i]=i;
rc=pthread_create(&threads[i],NULL,probSAT, (void *)&threads_args[i]);
}
pthread_exit(NULL);
return;
}
定义为 int (*)(void*)
的函数与定义为 void* (*)(void*)
的函数不兼容。您需要将 probSAT
定义为:
void *probSAT(void *);
如果你想从这个函数中有效地return一个int
,你可以return一个全局变量的地址或者(更好的选择)分配space 对于 int
和 return 指向它的指针(并确保在加入线程时释放它)。
void *probSAT(void *param) {
int *rval = malloc(sizeof(int));
if (rval == NULL) {
perror("malloc failed");
exit(1);
}
....
*rval = {some value};
return rval;
}
void get_thread_rval(pthread_t thread_id)
{
void *rval;
int *rval_int;
if (pthread_join(thread_id, &rval) != 0) {
perror("pthread_join failed");
} else {
rval_int = rval;
printf("thread returned %d\n", *rval_int);
free(rval_int);
}
}
我正在尝试生成 pthreads 并发送一个整数作为参数,但是在将参数转换为 void 时出现以下错误。我试图删除 (void*) 并隐式转换,但我仍然遇到相同的错误
error: invalid conversion from ‘int (*)(void*)’ to ‘void* (*)(void*)’ [-fpermissive]
rc=pthread_create(&threads[i],NULL,probSAT, (void *)&threads_args[i]);
void Solver::p(char** argc)
{
argvp=argc;
pthread_t threads[NTHREADS];
int threads_args[NTHREADS];
int i=0;
int rc;
for(i=0;i<5;i++)
if(order_heap.empty())
v[i]=i+1;
else
v[i]=(order_heap.removeMin())+1;
for (i=0;i<32;i++)
{
threads_args[i]=i;
rc=pthread_create(&threads[i],NULL,probSAT, (void *)&threads_args[i]);
}
pthread_exit(NULL);
return;
}
定义为 int (*)(void*)
的函数与定义为 void* (*)(void*)
的函数不兼容。您需要将 probSAT
定义为:
void *probSAT(void *);
如果你想从这个函数中有效地return一个int
,你可以return一个全局变量的地址或者(更好的选择)分配space 对于 int
和 return 指向它的指针(并确保在加入线程时释放它)。
void *probSAT(void *param) {
int *rval = malloc(sizeof(int));
if (rval == NULL) {
perror("malloc failed");
exit(1);
}
....
*rval = {some value};
return rval;
}
void get_thread_rval(pthread_t thread_id)
{
void *rval;
int *rval_int;
if (pthread_join(thread_id, &rval) != 0) {
perror("pthread_join failed");
} else {
rval_int = rval;
printf("thread returned %d\n", *rval_int);
free(rval_int);
}
}