【发布时间】:2011-11-12 22:41:25
【问题描述】:
我正在使用 Microsoft Visual Studio 2010 和 OpenCV 2.3.0 库编写图像处理应用程序。
我有一段代码对我来说是错误的,我不知道如何修复它。我正在实现一个应用程序,其中将同时打开 2 或 3 个窗口,我希望为每个窗口分配不同的 CvMouseCallback 函数。我希望所有这些 CvMouseCallback 函数与另一个函数一起位于不同的类中,该函数根据用户选择返回指向这些函数之一的指针。
我的 Window.h 包含这段代码。
class Window
{
public:
... // constructors and destructors
void setMouseHandler( CvMouseCallback mouseHandler );
private:
... // other stuff
};
和Window.cpp
#include "stdafx.h"
void Window::setMouseHandler( CvMouseCallback mouseHandler )
{
cvSetMouseCallback( win, mouseHandler, NULL );
}
现在,MouseHandler.h 文件
class MouseHandler
{
public:
...
CvMouseCallback selectHandler( int option );
void __cdecl selectROI( int event, int x, int y, int flags, void *param );
private:
Image *in;
Window *win;
void ( CV_CDECL MouseHandler::*callback )( int event, int x, int y, int flags, void *param );
};
最后,在 MouseHandler.cpp 我包含
void __cdecl MouseHandler::selectROI( int event, int x, int y, int flags, void *param )
{
//do something
}
CvMouseCallback MouseHandler::selectHandler( int option )
{
callback = (MouseHandler::selectROI);
return callback;
}
您可能需要的最后一点信息是 OpenCV 库中 CvMouseCallback 的定义
typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);
现在,问题是:当我从 MouseHandler.cpp 中的最后一个函数返回回调时,它带有下划线,并带有错误提示:
错误:返回值类型与函数类型不匹配。
我知道它说的是我试图强加给该函数以返回看起来不像它所要求的对象的东西。但是,它只是一个函数,如果我可以在主类中做到这一点,那就没问题了。我的问题是 selectHandler 如何返回指向 selectROI 函数的指针,以便其他类可以使用它?
【问题讨论】:
标签: c++ function pointers callback