navderm
navderm

Reputation: 819

creating checkbox/button in opencv

The error while creating a button in opencv argument of type 'void (Window::)(int, void*)' does not match '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();
}

I can't seem to find the fix to this problem.

Upvotes: 1

Views: 4952

Answers (1)

berak
berak

Reputation: 39816

oh, you can't pass in a member function of a class here. think of it, where would the 'this' pointer come from ? (like you call class members like w.CheckBox(1,NULL); there is no 'w' here. )

the highgui interface is a bit limited. it can only call free functions or static members.

so, if your callback function does not need anything from Window, make it static:

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

Upvotes: 1

Related Questions