2016-07-13 2 views
1
int function1(string data){ 
     stringstream ss(data); 
     return function2(ss); 
    } 
    int function2(stringstream& ss){ 
     string val; 
     getline(ss,val,','); 
     return stoi(val); 
    } 

Если изменить function2 ккак GetLine работает в этом коде

int function2(stringstream ss){...} 

Это не работает. Я хотел бы знать, почему? Ошибка compliation является

использование удаленной функции «станд :: basic_stringstream < _CharT, _Traits, _Alloc> :: basic_stringstream (Const станд :: basic_stringstream < _CharT, _Traits, _Alloc> &) [с _CharT = полукокса; _Traits = std :: char_traits; _Alloc = std :: allocator] '

И еще один вопрос: мне любопытно, как работает getline. Как и код ниже:

while(!getline(ss,val,',')) 
     cout<<val; 

Как getline отслеживает положение итератора после одной итерации?

+0

Объяснить "не работает"? Вы получаете ошибку компилятора или ошибку времени выполнения? –

+1

'getline()' не несет ответственности за позицию в потоке _ ** ** (подсказка). –

+0

@DavidThomas не могли бы вы объяснить больше? Я действительно не знаю –

ответ

1

Для определения int function2(stringstream ss) потребуется использовать удаленный экземпляр копии на stringstream. stringstream удалил конструктор копирования и оператор назначения копии. streamstream действительно позволяет двигаться.

getline() не отслеживает поток. Определение класса stringstream происходит от streambuf, который отвечает за эти мелочи/подробности.

2

Поскольку вы пытаетесь скопировать поток ss, и метод копирования удаляется с использованием (относительно) нового синтаксиса C++, поэтому возникает ошибка.

Вы не позволяете копировать поток, поэтому вы хотите передать его функции, вы должны использовать ссылку.

Вы можете найти информацию о

Смежные вопросы