1

我有一个问题。

我正在使用 boost::asio 开发聊天服务器。

和这里,

void CServerSocket::StartAccept(boost::asio::ip::tcp::acceptor &acceptor)
{
    std::shared_ptr<boost::asio::ip::tcp::socket> socket(new boost::asio::ip::tcp::socket(acceptor.get_io_service()));

    acceptor.async_accept(*socket, std::bind(&CServerSocket::OnAccept, boost::asio::placeholders::error, socket,
        std::ref(acceptor)));
}

void CServerSocket::OnAccept(const boost::system::error_code &error, std::shared_ptr<boost::asio::ip::tcp::socket> socket, 
    boost::asio::ip::tcp::acceptor &acceptor)
{
    if (error)
    {
        CLogManager::WriteLog((boost::format("Accept error! : %1%") % error.message()).str().c_str());
        return;
    }

    m_SocketList.push_back(std::make_shared<CConnectionSocket>(this, socket));

    StartAccept(acceptor);
}

在 std::bind 处发生错误。

“错误 c2064 术语不计算为采用 3 个参数的函数”

我应该怎么办?

谢谢。

4

2 回答 2

3

如果您正在使用std::bind,请替换boost::asio::placeholders::errorstd::placeholders::_1

于 2013-12-20T06:25:13.647 回答
-1

接受处理程序只能将错误代码作为参数,请参阅:AcceptHandler

我建议创建acceptor一个成员,CServerSocket然后将调用更改async_accept 为:

acceptor.async_accept(*socket, std::bind(&CServerSocket::OnAccept, this,
                                         std::placeholders::_1));

acceptorOnAccept成员函数内访问。

于 2013-12-20T07:43:27.477 回答