错误:从“int (*)(void*)”到“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 *);
如果要有效地从此函数返回int
,则可以返回全局变量的地址,或者(更好的选择)为int
分配空间并返回指向该变量的指针(并确保在加入线程时解除分配它)。
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 %dn", *rval_int);
free(rval_int);
}
}
相关文章:
- Boost buffer_cast 无法从 void* 转换为 PointerToPodType
- 将void*转换为某种类型的shared_ptr
- 如何将 void* 转换为函数指针?
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- 如何将 void 转换为 typedef void(..)(浮动)
- 无法将参数 1 从"int (__thiscall A::* *)(void)"转换为"int (__cdecl *)(void)"
- 从 'void *' 转换为 'const std::string *&' 必须具有所有中间指针 const 合格
- x = malloc(n * sizeof (int));无法将 void 转换为 int
- 错误:请求从“ void”转换为“ QString”的非量表类型
- 使用 LLVM 从 const void * 转换为模板类型时出现问题
- 如何修复错误:请求从"void"转换为非标量类型"std::vector<int>"
- void* 转换为基类并调用虚函数
- 将 void* 转换为 std::function<void()>
- 无法将参数 4 从 'void' 转换为'const char *'
- C++11 无法将 std::condition_variable::wait 从 'void' 转换为 'bool'
- 如何在 C++11 中将"const void*"转换为函数指针?
- 似乎无法在 c++ 中将 void* 转换为结构
- 将 void 转换为字节
- void * 转换为 int 语法的问题
- C++从类型“void*”转换为类型“double”无效