[英]Error: No match for call to 'boost::…'
我正在嘗試修改其他代碼。 只是想添加另一個訂戶。 這是代碼的框架:
namespace my_server
{
a_server::a_server(ros::NodeHandle n)
: nh()
{
ros::NodeHandle n(n_);
sub1 = new message_filters::Subscriber<sensor_msgs::PointCloud2> (nh(), "/x", 5);
sub2 = new tf::MessageFilter<sensor_msgs::PointCloud2> (*sub1, sub3, xyz, 5);
sub2->registerCallback(boost::bind(&a_server::callback, this, _1));
}
a_server::~a_server()
{
.....
}
void a_server::callback(const sensor_msgs::PointCloud2::ConstPtr& cl)
{
....
}
}
這是頭文件:
namespace my_server
{
class a_server
{
public:
a_server(ros::NodeHandle n_ = ros::NodeHandle("~"));
virtual ~a_server();
virtual void callback(const sensor_msgs::PointCloud2::ConstPtr& cl);
protected:
ros::NodeHandle n;
message_filters::Subscriber<sensor_msgs::PointCloud2>* sub1;
tf::MessageFilter<sensor_msgs::PointCloud2>* sub2;
tf::TransformListener sub3;
}
}
現在,我想向其添加另一個訂戶。 無需將其與先前的訂戶綁定。 我是通過在以前的訂閱者之后添加此行來實現的。
ros::Subscriber sub4 = m_nh.subscribe<geometry_msgs::Point>("/y", 1, &a_server::callback2);
並在void a_server::callback
之后添加了回調函數:
void a_server::callback2(geometry_msgs::Point &a)
{
....
}
而這到protected
頭文件:
void callback2(geometry_msgs::Point &a);
這是我得到的錯誤:
Error:
no match for call to ‘(boost::_mfi::mf1<void, my_server::a_server, geometry_msgs::Point_<std::allocator<void> >&>) (const boost::shared_ptr<const geometry_msgs::Point_<std::allocator<void> > >&)’
BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS));
我知道這與先前訂戶中的boost::bind
使用有關。 但我不想更改它們。 只需添加另一個訂戶,該訂戶的回調函數將更新一個全局變量,而該全局變量將由先前的回調函數使用。
因此,失去了寶貴的6個小時后。 這就是解決方法。 訂閱者添加如下:
ros::Subscriber sub4 = nh.subscribe<geometry_msgs::Point>("/y", 1, boost::bind(&a_server::callback2, this, _1));
回調函數是這樣寫的:
void a_server::callback2(const geometry_msgs::Point::ConstPtr& a)
{
....
}
頭文件是在Public:
下添加的Public:
void callback2(const geometry_msgs::Point::ConstPtr& a);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.