1

在“void (Window::)(int, void*)”类型的 opencv 参数中创建按钮时的错误与“cv::ButtonCallback {aka void ( )(int, void )}”不匹配

class Window{
    void ChecKBox(int state, void* val){
         // do nothing for now
         return;
    }
public:
    void createCheckbox(){
        cv::createButton(checkboxname, CheckBox, NULL, CV_CHECKBOX, 0);
    }
};

int main(){
    Window w;
    w.createCheckBox();
}

我似乎无法找到解决此问题的方法。

4

1 回答 1

1

哦,你不能在这里传入一个类的成员函数。想一想,'this'指针从何而来?(就像您调用 w.CheckBox(1,NULL) 之类的类成员一样;这里没有“w”。)

highgui 界面有点受限。它只能调用自由函数或静态成员。

因此,如果您的回调函数不需要 Window 中的任何内容,请将其设为静态:

class Window {
     static void CheckBox(int state, void* val) { /*you can't use 'this' here!*/ return; }
public: 
     void createCheckBox() { cv::createButton(checkboxname, CheckBox, NULL, CV_CHECKBOX, 0); } 
};

int main() {
    Window w; 
    w.createCheckBox();
}
于 2013-03-08T18:51:18.217 回答