0

我正在尝试使用点云库 API 将键盘回调函数注册到 3D 查看器。

我这样做:

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 >::*>(...)

4

1 回答 1

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如下所示:

查看器->registerKeyboardCallback(&RailExtraction::keyboard_callback, *this, (void*)>_data);

于 2013-01-11T21:24:03.400 回答