C++11 getline在此代码中的工作原理
如果我将函数2更改为C++11 getline在此代码中的工作原理,c++11,getline,C++11,Getline,如果我将函数2更改为 int function1(string data){ stringstream ss(data); return function2(ss); } int function2(stringstream& ss){ string val; getline(ss,val,','); return stoi(val); } 它不起作用。我想知道为什么? 顺从
int function1(string data){
stringstream ss(data);
return function2(ss);
}
int function2(stringstream& ss){
string val;
getline(ss,val,',');
return stoi(val);
}
它不起作用。我想知道为什么?
顺从错误是
使用已删除的函数“std::basic\u stringstream::basic\u stringstream(const std::basic\u stringstream&)[带{u CharT=char;{u Traits=std::char\u Traits;{u Alloc=std::allocator]'
另一个问题是,我很好奇getline实际上是如何工作的。如下面的代码所示:
int function2(stringstream ss){...}
while(!getline(ss,val,,'))
cout定义int function2(stringstream ss)
需要在stringstream
上使用已删除的复制构造函数stringstream
已删除复制构造函数和复制赋值运算符streamstream
不允许移动
getline()
不跟踪流<代码> STRIGSWATE 的类定义源于代码> StUBFF ,负责此细节/细节。 < P>由于您试图复制<代码> SS<代码>流,复制和使用新的C++语法删除流和复制方法,因此出现错误。
您不允许复制流,所以若要将其提供给函数,必须使用引用
你可以找到一些关于
- 删除的功能:
- stringstream构造函数:
解释“不起作用”?您收到的是编译器错误还是运行时错误?getline()
不对流中的位置负责(提示)。@DavidThomas您能解释更多吗?我真的不知道你说当你把function2
改成stringstream ss
时,它就不起作用了。什么确切地告诉你它不起作用?代码是否编译?或者当你运行你的程序时它会失败吗?所以编译器告诉你“你不能这么做!”。您正试图调用已删除的复制构造函数。stringstream的设计器不允许复制(仅移动)stringstreams。在进行更改之前,您需要传递对stringstream的引用—这不需要复制操作。
while(!getline(ss,val,','))
cout<<val;