int function1(string data){
stringstream ss(data);
return function2(ss);
}
int function2(stringstream& ss){
string val;
getline(ss,val,',');
return stoi(val);
}
如果我将function2更改为
int function2(stringstream ss){...}
它不起作用。我想知道为什么? 补偿错误是
使用已删除的函数&#st; :: basic_stringstream< _CharT,_Traits,_Alloc> :: basic_stringstream(const std :: basic_stringstream< _CharT,_Traits,_Alloc>&)[with _CharT = char; _Traits = std :: char_traits; _Alloc = std :: allocator]'
另一个问题是我很好奇getline是如何运作的。像下面的代码:
while(!getline(ss,val,','))
cout<<val;
getline在一次迭代后如何跟踪迭代器的位置?
答案 0 :(得分:2)
由于您尝试复制ss
流并且使用(相对)新的C ++语法删除了复制方法,因此发生错误。
你不允许复制流,所以你想把它交给一个函数,你必须使用引用。
您可以找到有关
的一些信息答案 1 :(得分:1)
定义int function2(stringstream ss)
需要在stringstream
上使用已删除的复制构造函数。 stringstream
已删除了复制构造函数和复制赋值运算符。 streamstream
允许移动。
getline()
不会跟踪流。 stringstream
的类定义来自streambuf
,它负责这个细节/细节。