ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, &listener);
使用類內函數時,將第四個參數替換成this:
ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, this);
然而報錯:需要輸入類模板類型,修改爲:
ros::Subscriber sub = n.subscribe<nav_msgs::Odometry>("chatter", 1000, &Listener::callback, this);
報錯:找不到匹配的subscribe函數
解決辦法:模仿move_base中subscribe函數的形式,使用boost::bind()函數
odom_sub = private_nh.subscribe<nav_msgs::Odometry>("odom", 1, boost::bind(&PatrolRobot::odomCB, this, _1));
this表示指向當前類的指針,用boost函數傳入,_1表示佔位符,可以參考Subscribe的第四個參數用法
注意:以此形式寫回調函數時,形參要寫成constptr形式:
void odomCB(const nav_msgs::Odometry::ConstPtr &odom);