错误C2039:'result_type':不是'`global namespace''的成员

时间:2015-07-07 21:13:10

标签: c++ boost visual-studio-2013

我的应用正在抛出此错误:

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){}

我的代码可能有什么问题?

更新

我能够使用这些更改编译代码

enter image description here

1 个答案:

答案 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中重现这一点并得到了这个:

enter image description here

记录:那是

  • 的Win32
  • 提升1_58_0
  • 的OpenSSL 1.0.2c-I386-的win32
  • Visual Studio 2013 Update 4

¹实际上我有时会注意到Asio接受使用GCC(我首选的编译器)处理程序函数的略有不同的签名。我一直想知道这是一个功能,还是一个bug?