我有一个问题。
我正在使用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个参数的函数”
我该怎么办?
感谢。
答案 0 :(得分:3)
如果您使用的是std::bind
,请将boost::asio::placeholders::error
替换为std::placeholders::_1
。
答案 1 :(得分:-1)
接受处理程序只能将错误代码作为参数,请参阅:AcceptHandler。
我建议acceptor
成为CServerSocket
的成员,然后将来电更改为async_accept
到:
acceptor.async_accept(*socket, std::bind(&CServerSocket::OnAccept, this,
std::placeholders::_1));
并访问acceptor
成员函数中的OnAccept
。