无法将boost :: asio :: netdb :: errors转换为std :: error_code

时间:2016-05-02 19:45:23

标签: c++ boost boost-asio cpp-netlib

我正在尝试编译此代码(取自cpp-netlib文档):

#include <boost/network/protocol/http/client.hpp>
#include <iostream>

int main(int argc, char *argv[]) {
    using namespace boost::network;

    if (argc != 2) {
        std::cout << "Usage: " << argv[0] << " [url]" << std::endl;
        return 1;
    }

    http::client client;
    http::client::request request(argv[1]);
    request << header("Connection", "close");
    http::client::response response = client.get(request);
    std::cout << body(response) << std::endl;

    return 0;
}

然而,它失败并出现此错误:

Error   C2446   ':': no conversion from 'boost::asio::error::netdb_errors' to 'const std::error_code'

我使用的是VS2015,cpp-netlib 0.12.0(最终版)和Boost 1.55.0,我不知道是什么原因引起的。有办法解决吗?我一直在试图让这个图书馆工作几天,但不幸的是,似乎总会出现一个新的错误。

2 个答案:

答案 0 :(得分:0)

在boost :: asio中,只要您打算在回调/调用中使用错误代码,就应该使用boost::system::error_code,而不是std::error_code

我不知道netlib在后台做了什么,但这可能是参考代码中的错误,或者只是使用错误符号的旧版本代码的证据。

答案 1 :(得分:0)

我正在使用clang 7.3.0,cppnetlib 0.12.0,asio 1.10.6并在OS X 10.11.4上提升10.60.0并且它可以工作。

我使用clang++ -lcppnetlib-uri -lcppnetlib-client-connections -lssl -lcrypto -I/opt/local/include -L/opt/local/lib -std=c++11 test.cpp -o test编译了您提供的示例。

如果要启用HTTPS支持,请务必在添加#define BOOST_NETWORK_ENABLE_HTTPS之前添加boost/network/protocol/http/client.hpp