2012-01-09 159 views
5

我使用字符串流的目的如下:如何将内容追加到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; 
} 

与上面的代码如下给出了一个错误:

error: variable 'std::stringstream message' has initializer but incomplete type 

上述错误一旦我添加了“#包括”头文件被解析。但是当我打印消息的价值。它变得不完整。即值i得到消息如下:

消息值为:第二线延续着第二linetion,添加值:my.string

为什么第一线在输出中去除任何建议?提前

+0

尝试包括标题。 – Goofy 2012-01-09 09:27:22

+0

你试过'#包括'吗? – Naveen 2012-01-09 09:27:33

+0

总是发布可编译的代码。在这种情况下,“刺痛”无效。 – Default 2012-01-09 09:43:01

回答

12

stringstream 由于在不同的头文件中定义:

#include <sstream> 

另外,如果你要的初始内容粘你会想是这样的:

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

其中app手段每个输出操作都写入流的末尾。见here

+1

非常感谢Vlad ....我解决了错误以及得到了正确的包含。 – BSalunke 2012-01-09 09:42:03

+0

没问题,很高兴帮助。 – Vlad 2012-01-09 10:02:38

6

继弗拉德的答案,我只是尝试以下(海合会4.7.0,在Windows 7的MinGW:x86_64的-W64-的mingw32)

std::stringstream ss("initial string", ios_base::app | ios_base::out); 
ss << " appended string"; 

但后来,ss.good()将返回false随即,这是令人困惑,因为ss.str()仍然返回我期望的附加字符串,"initial string appended string"。我终于在下面的行从http://www.cplusplus.com/reference/sstream/stringstream/stringstream/绊倒:

类型的ios_base ::用于openmode的其它值(诸如的ios_base ::应用)也可以被指定,虽然它们是否对stringstream的对象的效果依赖于库实现。

念叨“标准” ios_base::标志后,我想这一点,它给我的附加流内容我预计,随着ss.good()返回true

std::stringstream ss("initial string", ios_base::ate | ios_base::in | ios_base::out); 

[附:我宁愿将此发布为对弗拉德答案的评论,因为这不是直接的答案。这只是对他在使用operator <<时保留以前的流内容的建议发表评论。由于我没有足够的声望点评论他的答案,但我认为这对于遇到此问题的其他人有用,因此我将其张贴为答案。]