sách gpt4 ai đã đi

c++ - 错误 : argument of type ‘void* (Thread::)(void*)’ does not match ‘void* (*)(void*)’

In lại 作者:太空宇宙 更新时间:2023-11-04 15:22:18 30 4
mua khóa gpt4 Nike

Tôi đang sử dụngpthread 为我自己实现线程类。所以,我创建了 Chủ đề 类如下:

class Thread
{
công cộng:
Thread()
{
}

virtual void* run(void *params) = 0;

void start(void *params)
{
pthread_create (&threadId, 0, run, params);
pthread_join (threadId, 0);
}

riêng tư:
pthread_t threadId;
};

在实现这个类并覆盖virtual run 函数之后,我编译了这个项目。但是 error: argument of type ‘void* (Thread::)(void*)’ does not match ‘void* (*)(void*)’ 发生了。我的代码有什么问题?

Cảm ơn trước nhé:)

1 Câu trả lời

正是编译器告诉您的内容。

pthread_create 需要一个带有签名的函数:

无效* (*)(无效*)

这是一个函数指针。

但是,您提供的是带有此签名的内容:

void* (线程::)(void*)

KHÔNG函数指针,而是指向成员函数的指针。有一个区别:指向成员函数的指针需要一个对象的实例才能正常工作(在这里,它需要一个 Thread 的实例)。

通常的解决方案是使您的函数 chạy tĩnh :它将不再是成员函数 - 它不需要 Thread 的实例来执行可以正常工作了,您可以将当前实例作为 pthread_create 的最后一个参数传递,以便在线程启动后对其进行操作。您只需要将参数保存在类本身中。

công cộng:
void start(void *params)
{
this->my_thread_params = params;
pthread_create (&threadId, 0, run, static_cast(this));
}

riêng tư:
static void *run(void *my_object)
{
// here, my_object already contains the params you passed to the function start
static_cast(my_object)->my_member_function();
}

关于c++ - 错误 : argument of type ‘void* (Thread::)(void*)’ does not match ‘void* (*)(void*)’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049640/

30 4 0
Bài viết được đề xuất: css - 垂直居中 div,还有 20px 边距顶部和底部
Bài viết được đề xuất: java - Jenkins 在后台启动应用程序
Bài viết được đề xuất: gwt - 生成的 HTML 元素之间的空格
Bài viết được đề xuất: javascript - 注销按钮问题
太空宇宙
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