【发布时间】:2016-03-16 15:22:41
【问题描述】:
我正在尝试生成 pthread 并发送一个整数作为参数,但是在将参数转换为 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;
}
【问题讨论】:
-
编译器告诉你你的
probSAT函数有错误的原型来作为pthread入口函数。更改函数的类型,消息就会消失。 -
Solver::p看起来不像 C。确定你想要这篇标记为 C 的帖子吗? -
这不是C。请随意添加正确的标签。
-
另外,参数指针指向的
threads_args内存在线程访问时需要有效,但作为局部变量,不保证线程一定可以访问在它被摧毁之前。 -
因为问题实际上出在你的
probSAT函数上,包括这将有助于回答你的问题。
标签: c++ pthreads type-conversion