2013-01-10 38 views
0

我正在嘗試使用Point Cloud Library 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>::*>(...)是什麼意思?

+0

做一些閱讀後,我的理解是'無效(*)(...)'和'void(RailExtraction :: *>'是函數指針參數,但我仍然沒有想法如何修復錯誤。 – Mustafa

回答

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,*此,(無效*)& gt_data);

0

隨着最新版本的PCL(1.6)解決方案是稍微偏離,這個工作對我來說:

viewer->registerMouseCallback(&RailExtraction::keyboard_callback, *this, (void*)&gt_data); 
+0

已糾正的錯誤。我猜我丟失*在「this」前面。 – Mustafa