使用boost :: bind的“不匹配调用”错误

时间:2011-10-04 01:14:14

标签: c++ boost-bind

我仍然是boost :: bind的新手,现在移植了一个在2009年2年前编写的程序,看到下面的编译错误。任何解决方法的想法都将不胜感激。

提取的cpp文件:

class ClassA {
private:
    cNamespace::Bounds bounds_msg_;

    void boundsHandler(const PublisherPtr& p) { 
        p->publish(bounds_msg_);
    }

    void funcA() {
        node_->advertise<cNamespace::Bounds>("bounds", 10,
              boost::bind(&ClassA::boundsHandler, this, _1));  // <---- Line 445
    }
};

CMake错误:

/home/userA/ClassA.cpp:445:   instantiated from here
/usr/include/boost/bind/bind.hpp:313: error: no match for call to ‘(boost::_mfi::mf1<void, ClassA, const PublisherPtr&>) (ClassA*&, const ros::SingleSubscriberPublisher&)’

环境:Ubuntu 10.10,g ++(Ubuntu / Linaro 4.4.4-14ubuntu5)4.4.5

可能没有必要,但函数advertise的API参考是here,或者:

template<class M >
Publisher   advertise (const std::string &topic, 
                       uint32_t queue_size, 
                       const SubscriberStatusCallback &connect_cb, 
                       const SubscriberStatusCallback &disconnect_cb=SubscriberStatusCallback(),
                       const VoidConstPtr &tracked_object=VoidConstPtr(), 
                       bool latch=false)

1 个答案:

答案 0 :(得分:4)

看起来boost::bind生成的函数对象的调用类型与绑定的函数不同。

即。它使用const ros::SingleSubscriberPublisher&参数调用,而不是预期的const PublisherPtr& p

假设SubscriberStatusCallbackboost::function,你应该确保它的参数与你绑定的参数匹配。