2015-10-04 97 views
1

类的函数,当我试图通过一类函数的CreateThread从main函数调用,我得到了错误:错误C3867与调用CreateThread的

错误C3867:“显示:: fill_matrix”:函数调用缺少参数列表;使用 '&显示:: 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);