回调函数出错

时间:2013-01-10 21:50:12

标签: callback void point-cloud-library

我正在尝试使用Point Cloud Library API向3D查看器注册键盘回调函数。

Todo我这样做:

viewer->registerKeyboardCallback(&(RailExtraction::keyboard_callback), (void*)(&gt_data));

但是我收到以下错误消息:

note: no known conversion for argument 1 from 'void (RailExtraction< pcl::PointXYZI >::*) 
(const pcl::visualization::KeyboardEvent&, void*)' to 'void (*)(const pcl::visualization::KeyboardEvent&, void*)'

我正在尝试理解错误消息。我理解voidvoid *的意思,但void(*)(...)void(RailExtraction< pcl::PointXYZI >::*>(...)意味着什么?

1 个答案:

答案 0 :(得分:3)

我发现问题是我使用了错误版本的registerKeyBoardCallBack。我目前正在尝试使用此签名:

registerKeyboardCallback (void (*callback) (const pcl::visualization::KeyboardEvent&, void*), void* cookie = NULL)

但我应该使用这个签名: registerKeyboardCallback (void (T::*callback) (const pcl::visualization::KeyboardEvent&, void*), T& instance, void* cookie = NULL)

这是因为我的keyboard_callback函数是类的一部分,因此我需要指定类的实例,以便编译器可以确定要使用的keyboard_callback函数的实例。因此,我对registerKeyboardCallBack的新呼叫如下所示:

viewer-&gt; registerKeyboardCallback(&amp; RailExtraction :: keyboard_callback,* this,(void *)&amp; gt_data);