我尝试将一个类函数传递给从main函数调用的CreateThread,我收到了错误:
错误C3867:'显示:: fill_matrix':函数调用缺少参数列表;使用'& Display :: fill_matrix'创建指向成员的指针
class Display
{
public:
Display();
DWORD WINAPI fill_matrix();
};
Display display;
main() {
CreateThread(NULL, 0, display.fill_matrix, NULL, 0, 0);
}
答案 0 :(得分:2)
fill_matrix()
是一个非静态成员函数。因此,它的第一个参数是指向Display
类实例的指针。这就是编译器抱怨的内容。解决此问题的常用方法是创建一个静态成员函数并将其传递给CreateThread
。这是它想要的:
class Display
{
public:
Display();
static DWORD WINAPI fill_matrix_static(void* obj_ptr) {
Display* display_ptr = (Display*) obj_ptr;
return display_ptr->fill_matrix();
}
DWORD WINAPI fill_matrix();
};
然后像这样调用它:
CreateThread(NULL, 0, fill_matrix_static, (void*) &display, 0, 0);