sách gpt4 ai đã đi

c++ - 无法从类型 void*(classname::) () 转换为类型 void*(*)(void*)

In lại 作者:可可西里 更新时间:2023-11-01 17:22:59 26 4
mua khóa gpt4 Nike

class Scoreget{
riêng tư:
//some variables
công cộng:
Scoreget(){
//something here
}

void* basicgetscore(){
//somthing here
}

void getscore(Scoreget s){
pthread_t t;
if(pthread_create(&t,NULL,s.basicgetscore,NULL)==-1){
printf("Error 3\n");
exit(3);
}
void *a;
if(pthread_join(t,&a)==-1){
printf("Error \n);
exit(4);
}
}
};

我试图运行一个单独的线程来调用函数,因为它使用对 execl() 的调用,因此会停止我的程序(我在 Windows 上,不能使用 fork())。将线程与类结合起来给我带来了困难。

通过谷歌搜索,我了解到我需要将最后一个函数设为友元函数或静态函数,并使用某种 this 指针。我已经尝试过,但碎片不适合。我什至无法更改错误类型。现在让我很沮丧。得到同样的错误:

cannot convert Scoreget::basicgetscore from type void*(Scoreget::)() to type void* (*) (void *)

1 Câu trả lời

将其声明为静态的,并添加另一个辅助方法:

static void* basicgetscore(void * object){
return ((Scoreget *) object)->dobasicgetscore();
}

void * dobasicgetscore() // new helper method
{
// do stuff here
return NULL;
}

创建线程:

if (pthread_create(&t,NULL,basicgetscore,&s) == -1) { ...

另外,要非常小心。你给这个线程一个临时变量的地址。在这种特定情况下是安全的,因为 pthread_join 在同一个函数中,但是如果您要在线程退出之前从该函数返回,您将释放正在运行线程的对象,这可能会导致各种恶劣的行为。考虑将您的函数更新为 1) 获取引用或指针或 2) 对 cái này 进行操作。

关于c++ - 无法从类型 void*(classname::) () 转换为类型 void*(*)(void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12043057/

26 4 0
可可西里
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com