【问题标题】:Why does cleaning istringstream fail?为什么清理 istringstream 会失败?
【发布时间】:2016-04-02 14:12:37
【问题描述】:

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

谢谢:)

【问题讨论】:

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


    【解决方案1】:

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

    convert.str(c);
    

    【讨论】:

      【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 2016-09-01
        • 2011-12-26
        • 2016-04-11
        • 2021-10-10
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多