2015-10-04 2 views
1

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

ответ

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^