为了账号安全,请及时绑定邮箱和手机立即绑定

为什么会变成报错说不能把函数变成地址之类的, 求大神解释,菜鸟啥也不懂。

为什么会变成报错说不能把函数变成地址之类的, 求大神解释,菜鸟啥也不懂。

C++
Cats萌萌 2023-03-03 13:09:06
我定义了一个类A,里面有个函数void * repairFileThread(void *arg);为什么这样:pthread_t tid;pthread_create(&tid,NULL,repairFileThread,(void*)NULL);编译的时候老是:argument of type 'void* (A::)(void*)' does not match 'void* (*)(void*)'如果我把pthread_create(&tid,NULL,repairFileThread,(void*)NULL);改成pthread_create(&tid,NULL,&repairFileThread,(void*)NULL);就会报错
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

pthread_create(&tid,NULL,A::repairFileThread,NULL);

线程方法必须是静态方法,你如果写在类里,不能是成员函数,需要加static

这意味着你不能在repairFileThread里访问A实例的成员,不过你可以通过参数传递A的实例


A a;pthread_create(&tid,NULL,A::repairFileThread,a);.....void * A::repairFileThread(void *arg){  A* a = (A*)arg;  a->xxx...}


查看完整回答
反对 回复 2023-03-06
?
动漫人物

TA贡献1815条经验 获得超10个赞

因为类的成员函数经过处理会变成含有隐藏this指针的函数,与pthread_create的参数要求是不符合的,只能把该成员函数变成静态成员函数:static void* repairFileThread(void *arg), 不过仍然可以通过传递指针this的方式访问对象(arg)

查看完整回答
反对 回复 2023-03-06
  • 2 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信