【问题标题】:Pass a Stringstream into a method将 Stringstream 传递给方法
【发布时间】:2015-06-18 14:49:02
【问题描述】:

我要做的是创建一个以字符串流为参数的方法,在方法中写入,然后从方法外的字符串流中读取。

例如这样的。

void writeToStream(std::stringstream sstr){
   sstr << "Hello World";
}

int main(){
   std::stringstream sstr;
   writeToStream(sstr);
   std::cout << sstr.str();
}

当我这样做时,我得到了编译时错误。这可能是因为我应该使用对字符串流的引用或类似的东西。我尝试了使用引用或指针的不同组合,但似乎没有任何效果?

【问题讨论】:

  • 什么“编译时错误”?当您收到错误消息时,请发布它。
  • 另外,你使用了什么“引用或指针的组合”?从给出的答案中可以看出,代码在使用引用参数时可以正常工作。

标签: c++ stringstream


【解决方案1】:

你不能复制一个流,因此你不能按值传递它。

改为通过引用传递:

void writeToStream(std::stringstream &sstr)

【讨论】:

    【解决方案2】:

    std::stringstream 无法复制您为函数编写的方式。这是因为讨论了here 的原因。但是,您可以将std::stringstream 作为对您的函数的引用,这是完全合法的。下面是一些示例代码:

    #include <sstream>
    
    void writeToStream(std::stringstream &sstr){
       sstr << "Hello World";
    }
    
    int main(){
       std::stringstream sstr;
       writeToStream(sstr);
       std::cout << sstr.str();
    }
    

    【讨论】:

      【解决方案3】:

      如下更改你的函数并包含&lt;sstream&gt;

      void writeToStream(std::stringstream& sstr){
             sstr << "Hello World";
          }
      

      演示:http://coliru.stacked-crooked.com/a/34b86cfbd3cf87fc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-04
        • 2011-01-01
        • 2021-04-25
        • 2014-06-03
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多