我的应用正在抛出此错误:
error C2039: 'result_type' : is not a member of '`global namespace''
代码:
void handle_read_headers(const boost::system::error_code& err, RESTClient::response& resp)
{
if (!err)
{
// Process the response headers.
std::istream response_stream(&response_);
std::string header;
while (std::getline(response_stream, header) && header != "\r")
std::cout << header << "\n";
std::cout << "\n";
// Write whatever content we already have to output.
if (response_.size() > 0)
std::cout << &response_;
(&resp)->body = "Yehey!!!";
// Start reading remaining data until EOF.
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(1),
boost::bind(&client::handle_read_content, this,
boost::asio::placeholders::error, boost::ref(resp)));
}
else
{
std::cout << "Error: " << err << "\n";
}
}
“绑定”功能如下所示:
void handle_read_content(const boost::system::error_code& err, RESTClient::response& resp){}
我的代码可能有什么问题?
更新
我能够使用这些更改编译代码
答案 0 :(得分:1)
根据此文档页面,ReadHandler需要获取错误代码以及传输的字节数。
在调用绑定表达式时,可能是MSVC对丢失的占位符更加挑剔/敏感.¹
尝试将占位符参数添加到绑定:
// Start reading remaining data until EOF.
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(1),
boost::bind(&client::handle_read_content, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred,
boost::ref(resp)));
显然对处理程序函数本身也是如此:
void handle_read_content(const boost::system::error_code& ec, size_t bytes_transferred, RESTClient::response& resp){}
我花费了不合理的努力(感谢@qballer,@ nab和其他人在实时源代码上!)在Visual Studio中重现这一点并得到了这个:
记录:那是
¹实际上我有时会注意到Asio接受使用GCC(我首选的编译器)处理程序函数的略有不同的签名。我一直想知道这是一个功能,还是一个bug?