2015-02-04 2 views
0

Код ниже успешно отправляет асинхронное сообщение в заданную конечную точку.Ошибка компиляции при использовании std :: shared_ptr вместо boost :: shared_ptr

// message is a boost::shared_ptr<std::string> 

// open a UDP socket 
boost::asio::ip::udp::socket socket(ioService); 
socket.open(boost::asio::ip::udp::v4()); 

// create the remote endpoint 
boost::asio::ip::udp::endpoint remoteEndpoint(boost::asio::ip::address_v4::from_string(address), port); 

// asynchronously send a datagram to the remote endpoint 
socket.async_send_to(boost::asio::buffer(*message), 
        remoteEndpoint, 
        boost::bind(&MyClass::handler, 
           this, 
           message, 
           boost::asio::placeholders::error, 
           boost::asio::placeholders::bytes_transferred)); 

socket.close(); 

Однако, если изменить тип message к std::shared_ptr<std::string>, а не boost::shared_ptr<std::string> то вызов async_send_to не компилируется.

Ошибка:

boost/boost/bind/bind.hpp:457:9: No matching function for call to object of type 'boost::_mfi::mf3<void, MyClass, const boost::shared_ptr<std::__1::basic_string<char> > &, const boost::system::error_code &, unsigned long>'. 

Может кто-то объяснить, что это не так? Возможно, потому, что я использую boost :: bind?

+1

Что такое профайл 'MyClass :: handler'? – piwi

ответ

5

Похоже, проблема в том, что вы handler функция получает boost::shared_ptr, не std::shared_ptr и boost::shared_ptr не конструктивны от std::shared_ptr.

+0

Ничего себе, спасибо за быстрый ответ. Вот и все. – ksl

Смежные вопросы