2016-05-04 24 views
0

Ich fange an, mit den Poco C++ - Bibliotheken zu arbeiten, insbesondere für HTTP-Client/Server-Parsing. Ich habe gesehen, dass es Klassen wie HTTPRequest, HTTPResponse usw. gibt, und diese haben eine Methode namens "read (std :: istream)". Diese Methode verwendet ein Eingabeargument des Typs "std :: isotream". Ich möchte dies jedoch mit etwas verwenden, das ich über die Befehlszeile eingeben kann. Ich benutze cin, um die Eingabe zu nehmen, aber dies gibt einen Fehler, da istream und cin von verschiedenen Typen sind. Heres ein Beispiel:istream für die Kommandozeileneingabe für C++/Poco

Mein Verständnis ist, dass die Lesemethode die Daten als HTTPRequest-Typ interpretieren wird. Ich mache das nur zum Testen. Ich weiß, dass "string" -Typ nicht funktioniert, aber ich habe versucht, istream-Konstruktor mit getline usw. zu verwenden, und es gibt immer noch Fehler bei der Kompilierung. Was ist der ideale Weg, dies zu tun?

+0

'std :: cin' ist eine Art von' std :: istream'. Es ist definiert als "extern istream cin;" – smac89

Antwort

1

Gemäß der docs für POCO, die HTTPRequest :: Lese-Methode dauert ein std::istream Objekt.

void read(
    std::istream & istr 
); 

Wenn Sie die Anfrage von der Standardeingabe lesen möchten, übergeben Sie std :: cin als Parameter.

int main() { 
    HTTPRequest* req = new HTTPRequest(); 
    // std::string input; 
    // std::cout << "Enter something.. " << std::endl; 
    // std::cin >> input; 
    req->read(std::cin); 

    return 0; 
} 

Wenn es von std::cin zu lesen versucht, es wird Sie auffordern, für die Eingabe, so können Sie eingeben, was Sie in die Zeichenfolge eingeben versuchten es Sie hatten. Ich würde dann empfehlen, entweder ein std::ifstream Objekt zu verwenden oder std::istringstream zu verwenden. Diese beiden Unterklassen std::istream, so dass Sie das als Parameter übergeben können.

Ex:

int main() { 
    HTTPRequest* req = new HTTPRequest(); 
    std::string input; 
    std::cout << "Enter something.. " << std::endl; 
    std::cin >> input; 
    std::istringstream iss(input); 

    req->read(iss); 

    return 0; 
} 
Verwandte Themen