【问题标题】:"no match for call" error using boost::bind使用 boost::bind 的“呼叫不匹配”错误
【发布时间】:2011-10-04 01:14:14
【问题描述】:

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

提取的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)

【问题讨论】:

    标签: c++ boost-bind


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2021-01-11
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多