2013-05-03 25 views
1

我遇到了一個綁定錯誤提振完成處理程序綁定錯誤

/usr/local/include/boost/bind/bind.hpp:457:錯誤:無效的使用無效表達

我的節目是關於使用回調處理程序如下異步操作:

template<typename Handler> 
void async_monitor(Handler handler) { 
    stream_descriptor_.async_read_some(
      boost::asio::buffer(read_buffer_), 
      boost::bind(&dir_monitor_impl::handle_monitor<Handler>, shared_from_this(), 
        boost::asio::placeholders::error, 
        boost::asio::placeholders::bytes_transferred, 
        handler)); 
}//IF I remove this code, the compilation success 

而且處理程序聲明:

template<typename Handler> 
void handle_monitor(boost::system::error_code &ec, 
     std::size_t bytes_transferred, Handler handler){ 
} 

最後,這些臺異步操作用作follwowing:

template <typename Handler> 
void start_async_monitor(implementation_type &impl, Handler handler) 
{ 
    //this->async_monitor_io_service_.post(monitor_operation<Handler>(impl, this->get_io_service(), handler)); 
    impl->async_monitor(handler); 
} 

難道你們幫我解釋一下這個錯誤,非常感謝!

+1

你可以發佈完整的錯誤消息? – TemplateRex 2013-05-03 06:27:37

+0

@rhalbersma:在這裏發帖很久了。 Compliler不會完全顯示錯誤。 – khanhhh89 2013-05-03 06:48:27

+0

/usr/local/include/boost/bind/bind.hpp:392:錯誤:無法匹配調用'(boost :: _ mfi :: mf2 )(file_handler *&,const boost :: system :: error_code&,const long unsigned int&)' – khanhhh89 2013-05-03 06:55:19

回答

2

處理程序簽名必須是以下(注意常量):

void handle_monitor(const boost::system::error_code &ec, std::size_t bytes_transferred, Handler handler)

+0

+1找不到'const'。我一直盯着它5分鐘,錯過了它。 – TemplateRex 2013-05-03 22:32:46

+0

@ lgor:謝謝你!我解決了這個問題。錯誤是我的綁定函數中的參數處理函數在==>嵌套綁定==>錯誤之前是有界的。 – khanhhh89 2013-05-06 03:49:12

+0

@ khanhhh89如果一個答案回答你的問題,請按「接受」接受它 - 這樣,問題就會被標記爲已回答,並且可以幫助其他用戶搜索類似的問題。 – 2013-05-06 06:37:46