为什么清理istringstream会失败?

Why does cleaning istringstream fail?

在将字符串转换为整数时,我未能清除我的 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&)'|

谢谢:)

convert(c); 需要 std::istringstream 来定义函数调用运算符 operator(),可以用 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;

您不能调用已经构造的对象的构造函数 convert(c)。要设置要解析的新字符串,您需要调用函数 str(c)。所以你需要把它改成:

convert.str(c);