2010-05-19 31 views
0

這行代碼正確編譯沒有問題:綁定構件信號到功能

boost::bind(boost::ref(connected_), 
      boost::dynamic_pointer_cast<session<version> >(shared_from_this()), 
      boost::asio::placeholders::error); 

然而將其分配給升壓::功能或作爲這樣的回調時:

socket_->async_connect(connection_->remote_endpoint(), 
         boost::bind(boost::ref(connected_), 
         boost::dynamic_pointer_cast<session<version> >(shared_from_this()), 
         boost::asio::placeholders::error)); 

我收到了一大堆incomprehensible errors(鏈接,因爲它太長,不適合在這裏)。

在另一方面,我已經成功綁定一個自由信號到一個boost ::功能是這樣的:

void print(const boost::system::error_code& error) 
{ 
    cout << "session connected"; 
} 

int main() 
{ 
boost::signal<void(const boost::system::error_code &)> connected_; 
connected_.connect(boost::bind(&print, boost::asio::placeholders::error)); 

    client<>::connection_t::socket_ptr socket_(new client<>::connection_t::socket_t(conn->service())); // shared_ptr of a tcp socket 

    socket_->async_connect(conn->remote_endpoint(), 
         boost::bind(boost::ref(connected_), 
         boost::asio::placeholders::error)); 
    conn->service().run(); // io_service.run() 
    return 0; 
} 

這工作,正確打印session connected。 我在這裏做錯了什麼?

回答

0

您是否已通讀綁定troubleshooting guide?我不熟悉你的編譯器,但是你的錯誤看起來類似於故障排除部分的第二個項目符號「函數對象不能用指定的參數調用。」