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 に答える