Ошибка C3867 при вызове функции класса с CreateThread
Я пытаюсь передать функцию класса 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);
}
1 ответ
Решение
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);