Robotics StackExchange | Archived questions

a error occurs when using boost::bind to the basic listener.cpp

Hi,

I am using boost bind to subscribe to several topics, following this.

I programmed a basic listener.cpp according to the wiki, and added boost::bind to it. Unfornately, the errors occured.

Can anyone help me? Many thanks.

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <boost/bind.hpp>

void foo(int a, int b) {
    std::cout << "a + b = " << (a + b) << std::endl;

    return;
}

void chatterCallback(const std_msgs::String::ConstPtr& msg) {
    ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv) {
    //foo(1, 2);
    // it works good for foo
    //boost::bind(foo, _1, 5)(1);

    ros::init(argc, argv, "listener_bind");

    ros::NodeHandle n;
    //ros::Subscriber sub = n.subscribe("chatter0", 1000, chatterCallback);
    ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));

    ros::spin();

    return 0;
}

The resulting log shows

    /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp: In function ‘int main(int, char**)’:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: error: no matching function for call to ‘ros::NodeHandle::subscribe(const char [9], int, boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >)’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note: candidates are:
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:401:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(M), T*, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, void(T::*fp)(M), T* obj, 
              ^
/opt/ros/indigo/include/ros/node_handle.h:401:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(M)’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:412:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(M)const, T*, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, void(T::*fp)(M) const, T* obj, 
              ^
/opt/ros/indigo/include/ros/node_handle.h:412:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(M)const’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:464:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(const boost::shared_ptr<const M>&), T*, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, 
              ^
/opt/ros/indigo/include/ros/node_handle.h:464:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(const boost::shared_ptr<const M>&)’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:474:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(const boost::shared_ptr<const M>&)const, T*, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, 
              ^
/opt/ros/indigo/include/ros/node_handle.h:474:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(const boost::shared_ptr<const M>&)const’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:528:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(M), const boost::shared_ptr<U>&, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, void(T::*fp)(M), 
              ^
/opt/ros/indigo/include/ros/node_handle.h:528:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(M)’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:539:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(M)const, const boost::shared_ptr<U>&, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, void(T::*fp)(M) const, 
              ^
/opt/ros/indigo/include/ros/node_handle.h:539:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(M)const’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:593:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(const boost::shared_ptr<const M>&), const boost::shared_ptr<U>&, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, 
              ^
/opt/ros/indigo/include/ros/node_handle.h:593:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(const boost::shared_ptr<const M>&)’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:604:14: note: template<class M, class T> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (T::*)(const boost::shared_ptr<const M>&)const, const boost::shared_ptr<U>&, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, 
              ^
/opt/ros/indigo/include/ros/node_handle.h:604:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (T::*)(const boost::shared_ptr<const M>&)const’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:655:14: note: template<class M> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (*)(M), const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, void(*fp)(M), const TransportHints& transport_hints = TransportHints())
              ^
/opt/ros/indigo/include/ros/node_handle.h:655:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (*)(M)’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:703:14: note: template<class M> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, void (*)(const boost::shared_ptr<const M>&), const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, void(*fp)(const boost::shared_ptr<M const>&), const TransportHints& transport_hints = TransportHints())
              ^
/opt/ros/indigo/include/ros/node_handle.h:703:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   mismatched types ‘void (*)(const boost::shared_ptr<const M>&)’ and ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:749:14: note: template<class M> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, const boost::function<void(const boost::shared_ptr<const M>&)>&, const VoidConstPtr&, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, const boost::function<void (const boost::shared_ptr<M const>&)>& callback,
              ^
/opt/ros/indigo/include/ros/node_handle.h:749:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’ is not derived from ‘const boost::function<void(const boost::shared_ptr<const M>&)>’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:798:14: note: template<class M, class C> ros::Subscriber ros::NodeHandle::subscribe(const string&, uint32_t, const boost::function<void(C)>&, const VoidConstPtr&, const ros::TransportHints&)
   Subscriber subscribe(const std::string& topic, uint32_t queue_size, const boost::function<void (C)>& callback,
              ^
/opt/ros/indigo/include/ros/node_handle.h:798:14: note:   template argument deduction/substitution failed:
/home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:23:89: note:   ‘boost::_bi::bind_t<void, void (*)(const boost::shared_ptr<const std_msgs::String_<std::allocator<void> > >&), boost::_bi::list1<boost::arg<1> > >’ is not derived from ‘const boost::function<void(C)>’
     ros::Subscriber sub = n.subscribe("chatter0", 1000, boost::bind(chatterCallback, _1));
                                                                                         ^
In file included from /opt/ros/indigo/include/ros/ros.h:45:0,
                 from /home/alex/Documents/Tutorials/ROS/wiki/catkin_ws/src/beginner_tutorials/src/listener_bind.cpp:1:
/opt/ros/indigo/include/ros/node_handle.h:835:14: note: ros::Subscriber ros::NodeHandle::subscribe(ros::SubscribeOptions&)
   Subscriber subscribe(SubscribeOptions& ops);
              ^
/opt/ros/indigo/include/ros/node_handle.h:835:14: note:   candidate expects 1 argument, 3 provided
make[2]: *** [beginner_tutorials/CMakeFiles/listener_bind.dir/src/listener_bind.cpp.o] Error 1
make[1]: *** [beginner_tutorials/CMakeFiles/listener_bind.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j8 -l8" failed

Asked by Xiang on 2017-05-25 04:30:41 UTC

Comments

Never mind, my mistake about understanding of boost::bind(). I closed the question. Sorry.

Asked by Xiang on 2017-05-25 06:09:40 UTC

Answers