2016-05-02 10 views
0

Ich versuche, diesen Code zu kompilieren (aus der Dokumentation cpp-netlib genommen):Kann nicht boost konvertieren :: asio :: netdb :: Fehler std :: error_code

#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; 
} 

schlägt jedoch fehl, es mit diesem Fehler :

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

ich VS2015 cpp-netlib 0.12.0 (final) und 1.55.0 Erhöhung, und ich habe keine Ahnung, bin mit, was könnte dies verursachen. Gibt es eine Möglichkeit, es zu beheben? Ich habe mir am Kopf gekratzt, um diese Bibliothek für ein paar Tage arbeiten zu lassen, aber es scheint immer wieder ein neuer Fehler auftauchen zu müssen.

+0

Normalerweise müssen Sie für 'boost asio' eine Verbindung mit' boost_system' herstellen, um Fehler zu behandeln. Ich habe aber kurz durch 'boost/asio/error.hpp' und' boost/system/error_code.hpp' geschaut, ich glaube nicht, dass 'boost :: asio :: error :: netdb_errors' ein ist 'asio' Fehler, ich denke es ist ein' cpp-netlib' Fehler ... Hoffentlich haben sie den gleichen Mechanismus benutzt. – kenba

Antwort

0

In boost :: asio wird erwartet, dass Sie boost::system::error_code jederzeit verwenden, wenn Sie beabsichtigen, Fehlercodes in Ihren Rückrufen/Aufrufen zu verwenden, nicht std::error_code.

Ich weiß nicht, was Netlib im Hintergrund macht, aber das könnte ein Hinweis auf einen Fehler im Referenzcode oder einfach eine ältere Version des Codes mit den falschen Symbolen sein.

0

Ich benutze clang 7.3.0, cppnetlib 0.12.0, asio 1.10.6 und Boost 10.60.0 auf OS X 10.11.4 und es funktioniert.

Ich kompilierte das von Ihnen bereitgestellte Beispiel mit clang++ -lcppnetlib-uri -lcppnetlib-client-connections -lssl -lcrypto -I/opt/local/include -L/opt/local/lib -std=c++11 test.cpp -o test.

Stellen Sie sicher, dass #define BOOST_NETWORK_ENABLE_HTTPS vor einschließlich boost/network/protocol/http/client.hpp hinzugefügt wird, wenn Sie die HTTPS-Unterstützung aktivieren möchten.