Robotics StackExchange | Archived questions

having problems with subscribe when using boost::bind

here is my code


#include <ros/ros.h>
#include "costmap/costmap.h"
#include <sensor_msgs/LaserScan.h>
int main(int argc, char **argv) {
    ros::init(argc, argv, "costmap");
    ros::NodeHandle n;
    costmap costmap_;
    ros::Subscriber sub = n.subscribe<sensor_msgs::LaserScan::ConstPtr>("scan", 1000, boost::bind(&upDateMap, _1, costmap_));
    ros::spin();
    return 0;}

void upDateMap(const sensor_msgs::LaserScan::ConstPtr &msg, costmap &costmap_){}

and here is my costmap.h:

void upDateMap(const sensor_msgs::LaserScan::ConstPtr &msg, costmap &costmap_);
class costmap {};

costmap is a class defined by me.

When i run catkinmake,`In file included from /home/mushen/catkinws/src/costmap/src/costmap.cpp:1:0: /home/mushen/catkin_ws/src/costmap/include/costmap/costmap.h:14:61: error: ‘costmap’ has not been declared `comes out.

how could i solve this?

Asked by zhazha on 2018-12-21 05:16:05 UTC

Comments

Is the costmap class actually declared in the .cpp file that contains main(..)? If not, it could be that you're simply missing an #include for the header that declares costmap.

Asked by gvdhoorn on 2018-12-21 05:23:57 UTC

Isn't the issue that you're using costmap (the class) in upDateMap(..) before it's actually declared in costmap.h?

Try swapping the declarations of class costmap and void upDateMap(..) and recompile.

This seems like a straightforward C++ issue to me, not a ROS or boost::bind one.

Asked by gvdhoorn on 2018-12-21 05:45:03 UTC

Answers