为什么清洗isstreamstream失败?

时间:2016-04-02 14:12:38

标签: c++ string c++11 istringstream sstream

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

谢谢:)

2 个答案:

答案 0 :(得分:4)

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

convert.str(c);

答案 1 :(得分:2)

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;