【问题标题】:error C3867 when calling class function with CreateThread使用 CreateThread 调用类函数时出现错误 C3867
【发布时间】:2015-10-04 09:35:07
【问题描述】:

我尝试将一个类函数传递给从主函数调用的 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);
}

【问题讨论】:

    标签: winapi visual-c++ createthread


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2019-02-17
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多