【发布时间】:2016-11-16 17:38:36
【问题描述】:
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){...}
它不起作用。我想知道为什么? 编译错误是
使用已删除的函数 'std::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 如何在一次迭代后跟踪迭代器的位置?
【问题讨论】:
-
解释“不起作用”?您遇到编译器错误还是运行时错误?
-
getline()不对 流 中的位置负责(提示)。 -
@DavidThomas 你能解释更多吗?我真的不知道
-
你说当你把
function2改成stringstream ss,就不行了。究竟是什么告诉你它不起作用?代码是否编译?或者当你运行你的程序时它会失败? -
所以编译器告诉你“你不能那样做!”。您正在尝试调用已删除的复制构造函数。 stringstream 的设计者不允许复制字符串流(仅移动)。在更改之前,我们传递了对字符串流的引用 - 这不需要复制操作。