1

我尝试将一个类函数传递给从主函数调用的 CreateThread,但出现错误:

错误 C3867:“Display::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);
}
4

1 回答 1

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);
于 2015-10-04T10:20:06.937 回答