2016-04-02 6 views
0

Lors de la conversion d'une chaîne en entier, je n'arrive pas à effacer mon flux istrings pour le placer dans un autre nombre. J'ai essayé toutes sortes de solutions différentes, mais ça ne marchera pas. Il y a quelques contournements travail mais j'aimerais apprendre à savoir pourquoi ...Pourquoi le nettoyage istringstream échoue-t-il?

Donc, fondamentalement, voici comment mon code ressemble

#include <iostream> 
#include <string> 
#include <sstream> 

int main() { 

    std::string a = "153"; 
    std::string c = "2556"; 

    int b; 

    std::istringstream convert(a); 

    convert >> b; 

    std::cout << b << std::endl; 

    convert.str(std::string()); 
    //convert.str(""); 
    convert.clear(); 

    convert(c); 

    convert >> b; 

    std::cout << b << std::endl; 

    return 0; 
} 

Et l'erreur de sortie suivante

C:\...\string to int.cpp|28|error: no match for call to '(std::istringstream {aka std::basic_istringstream<char>}) (std::string&)'| 

Merci :)

Répondre

4

Vous ne pouvez pas appeler le constructeur convert(c) d'un objet déjà une fois construit. Pour définir une nouvelle chaîne à analyser, vous devez appeler la fonction str(c). Vous devez donc le changer pour:

convert.str(c); 
2

convert(c); aurait besoin std::istringstream de définir un opérateur d'appel de fonction operator() qui peut être appelée avec un lvalue de type std::string. Ce n'est pas le cas.

Vous pouvez utiliser clear() et str():

std::string a = "153"; 
std::string c = "2556"; 
int b{ 0 }; 
std::istringstream convert{ a }; 
convert >> b; 
std::cout << b << std::endl; 
convert.clear(); 
convert.str(c); 
convert >> b; 
std::cout << b << std::endl;