ошибка "нет совпадения для вызова" с использованием boost :: bind - PullRequest
4 голосов
/ 04 октября 2011

Я все еще новичок в 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

Может быть необязательным, но ссылка API для функции advertise здесь здесь или:

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 Ответ

4 голосов
/ 04 октября 2011

Похоже, что объект функции, создаваемый boost::bind, вызывается с типом, отличным от функции, которую вы связали.

т.е. он вызывается с аргументом const ros::SingleSubscriberPublisher& вместо ожидаемого const PublisherPtr& p.

Предполагая, что SubscriberStatusCallback является boost::function, вы должны убедиться, что его аргумент совпадает с аргументом, который вы связали.

...