如何将内容附加到stringstream类型对象?

BSa*_*nke 7 c++

我正在使用stringstream的对象如下:

#include<iostream>
#include <istream>

using namespace std;
int main()
{
    sting str="my.string";

    std::stringstream message("HI this is firet line from initialization");

    message << " second line " << " Continueing second line";

    message << ", Add values: ";

    message << str ;


    std::cout<<"message value is :"<<message.str()<<std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,它会给出如下错误:

 error: variable 'std::stringstream message' has initializer but incomplete type
Run Code Online (Sandbox Code Playgroud)

一旦我添加了"#include"头文件,就会解决上面的错误.但是当我打印出消息的价值时.它变得不完整了.即我得到的消息的价值如下:

消息值为:第二行继续第二行,添加值:my.string

关于为什么第一行在输出中删除的任何建议?提前致谢

Vla*_*lad 14

stringstream 在不同的标题中定义:

#include <sstream>
Run Code Online (Sandbox Code Playgroud)

此外,如果你想要坚持初始内容,你会想要这样的东西:

std::stringstream message("HI this is firet line from initialization",
                                             ios_base::app | ios_base::out);
Run Code Online (Sandbox Code Playgroud)

where app表示每个输出操作都写入流的末尾.看到这里.


Ant*_*all 9

在弗拉德的回答之后,我刚刚尝试了以下内容(在GCC 4.7.0中,mingw在Windows 7上:x86_64-w64-mingw32)

std::stringstream ss("initial string", ios_base::app | ios_base::out);
ss << " appended string";
Run Code Online (Sandbox Code Playgroud)

但之后,ss.good()会立即返回false,这很令人困惑,因为ss.str()仍然会返回我预期的附加字符串,"initial string appended string".我终于偶然发现了http://www.cplusplus.com/reference/sstream/stringstream/stringstream/上的以下内容:

也可以指定ios_base :: openmode类型的其他值(例如ios_base :: app),尽管它们是否对stringstream对象有影响取决于库实现.

在阅读了"标准" ios_base::标志后,我尝试了这个,它给了我预期的附加流内容,ss.good()返回true:

std::stringstream ss("initial string", ios_base::ate | ios_base::in | ios_base::out);
Run Code Online (Sandbox Code Playgroud)

[PS我宁愿发布这篇文章作为对Vlad的答案的评论,因为它不是一个直接的答案; 这只是对他在使用时保留以前的流内容的建议的评论operator <<.由于我没有足够的声誉点来评论他的答案,但我认为这对其他遇到此问题的人有用,我将其作为答案发布.]