2012-02-26 60 views
2

我收到此錯誤「錯誤:沒有匹配函數調用‘ros::NodeHandle::subscribe(const char [24], int, <unresolved overloaded function type>)’ROS:訂閱功能不承認我的回調方法

這是我的回調函數在我的課BangBangControlUnit

// on message reciept: 'current_maintained_temp' void current_maintained_temp_callback(const std_msgs::Int32::ConstPtr& msg){ temp_to_maintain = msg->data;
}

,這就是我如何使用訂閱我的主要功能

// subscribe to 'current_maintained_temp' ros::Subscriber current_maintained_temp_sub = n.subscribe("current_maintained_temp", 1000, control.current_maintained_temp_callback);

有人能告訴我我做錯了什麼嗎?

回答

7

的回調是如下創建一個類方法的用戶正確簽名:

ros::Subscriber sub = nh.subscribe("my_topic", 1, &Foo::callback, &foo_object); 

所以你的情況,你應該使用:

current_maintained_temp_sub = n.subscribe("current_maintained_temp", 1000, &BangBangControlUnit::current_maintained_temp_callback, &control); 

你可以閱讀更多有關出版商和用戶使用C++ here

+2

只是一個小提示:您可以很容易地將訂閱者包含在回調函數所屬的類中,從而使事情更加連貫。只需用'this'關鍵字替換最後一個參數,告訴用戶該對象是它所屬的類。 – rbaleksandar 2015-08-19 19:04:19