我正在尝试使用Point Cloud Library API向3D查看器注册键盘回调函数。
Todo我这样做:
viewer->registerKeyboardCallback(&(RailExtraction::keyboard_callback), (void*)(>_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*)'
我正在尝试理解错误消息。我理解void
和void *
的意思,但void(*)(...)
或void(RailExtraction< pcl::PointXYZI >::*>(...)
意味着什么?
答案 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);