使用 CreateThread 调用 class 函数时出现错误 C3867
error C3867 when calling class function with CreateThread
我尝试将 class 函数传递给从 main 函数调用的 CreateThread,但出现错误:
error C3867: 'Display::fill_matrix': function call missing argument list; use '&Display::fill_matrix' to create a pointer to member
class Display
{
public:
Display();
DWORD WINAPI fill_matrix();
};
Display display;
main() {
CreateThread(NULL, 0, display.fill_matrix, NULL, 0, 0);
}
fill_matrix()
是一个非静态成员函数。因此它的第一个参数是指向 Display
class 实例的指针。这就是编译器所抱怨的。解决这个问题的正常方法是制作一个静态成员函数并将其传递给 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);
我尝试将 class 函数传递给从 main 函数调用的 CreateThread,但出现错误:
error C3867: 'Display::fill_matrix': function call missing argument list; use '&Display::fill_matrix' to create a pointer to member
class Display
{
public:
Display();
DWORD WINAPI fill_matrix();
};
Display display;
main() {
CreateThread(NULL, 0, display.fill_matrix, NULL, 0, 0);
}
fill_matrix()
是一个非静态成员函数。因此它的第一个参数是指向 Display
class 实例的指针。这就是编译器所抱怨的。解决这个问题的正常方法是制作一个静态成员函数并将其传递给 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);