c++ - 错误:不匹配调用'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:
void callback2(const geometry_msgs::Point::ConstPtr& a);
推荐阅读
- xamarin.forms - 防止在基本视图更改时更改拖放阴影
- machine-learning - 我应该如何修复代码以使使用训练数据的线性回归模型正常工作?
- reactjs - 迭代哈希图以填充 ReactJS 中的 Accordion 组件
- python - 公共 VQGA 代码上的“Nonetype”对象错误是什么意思?
- javascript - 如何动态生成菜单选项
- elasticsearch - 使用 Logstash grock 过滤器解析 Syslog 不适用于 Kibana
- maven - jersey-bean-validator 是否对 hibernate-validator 有直接或传递依赖?
- binding - Blazor 中的绑定延迟 1 步
- swift - 使用 Swift 在 firebase 中访问用户的名字和其他信息
- javascript - 返回每个数字的素数数组的数组