#c #boost-bind
#c #boost-привязка
Вопрос:
Я все еще новичок в boost :: bind и теперь переношу программу, которая была написана 2 года назад в 2009 году, видя ошибку компиляции ниже. Любая идея по обходному пути будет оценена.
Извлеченный cpp-файл:
class ClassA {
private:
cNamespace::Bounds bounds_msg_;
void boundsHandler(const PublisherPtramp; p) {
p->publish(bounds_msg_);
}
void funcA() {
node_->advertise<cNamespace::Bounds>("bounds", 10,
boost::bind(amp;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 PublisherPtramp;>) (ClassA*amp;, const ros::SingleSubscriberPublisheramp;)’
Среда: Ubuntu 10.10, g (Ubuntu / Linaro 4.4.4-14ubuntu5) 4.4.5
Может и не понадобиться, но ссылка на API функции advertise
здесь, или:
template<class M >
Publisher advertise (const std::string amp;topic,
uint32_t queue_size,
const SubscriberStatusCallback amp;connect_cb,
const SubscriberStatusCallback amp;disconnect_cb=SubscriberStatusCallback(),
const VoidConstPtr amp;tracked_object=VoidConstPtr(),
bool latch=false)
Ответ №1:
Похоже, что объект функции, который создается, boost::bind
вызывается с другим типом, чем функция, которую вы связали.
т.е. он вызывается с const ros::SingleSubscriberPublisheramp;
аргументом вместо ожидаемого const PublisherPtramp; p
.
Предполагая SubscriberStatusCallback
, что это a boost::function
, вы должны убедиться, что его аргумент соответствует тому, который вы связали.