2016-04-02 10 views
0

Преобразуя строку в целое число, я просто не могу очистить свой istringstream, чтобы разместить его в другом номере. Я пробовал всевозможные решения, но он просто не работает. Есть несколько рабочих обходные, но я хотел бы узнать, чтобы узнать, почему ...Почему очистка istringstream терпит неудачу?

Так в основном это, как мой код выглядит

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

И следующая ошибка вывода

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

Спасибо :)

ответ

4

Вы не можете вызвать конструктор convert(c) объекта однажды уже построенного. Чтобы установить новую строку для синтаксического анализа, необходимо вызвать функцию str(c). Поэтому вам необходимо изменить его на:

convert.str(c); 
2

convert(c); потребовали бы std::istringstream определить функцию вызова оператора operator(), который можно назвать с Lvalue типа std::string. Это не тот случай.

Вы можете использовать clear() и 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; 
Смежные вопросы