【问题标题】:How to append content to stringstream type object?如何将内容附加到字符串流类型对象?
【发布时间】:2012-01-09 09:24:55
【问题描述】:

我正在使用 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

一旦我添加了“#include”头文件,上述错误就解决了。但是当我打印消息的值时。它变得不完整。即我得到的消息值如下:

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

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

【问题讨论】:

  • 尝试包含 标头。
  • 你试过#include &lt;sstream&gt;吗?
  • 总是发布可编译的代码。 sting 在此上下文中无效。

标签: c++


【解决方案1】:

stringstream 在不同的标头中定义:

#include <sstream>

此外,如果您希望保留初始内容,则需要以下内容:

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

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

【讨论】:

  • 非常感谢弗拉德....我得到了解决的错误以及正确的包含。
【解决方案2】:

按照 Vlad 的回答,我刚刚尝试了以下方法(在 GCC 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::app),尽管它们是否对 stringstream 对象有影响取决于库实现。

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 2012-02-04
    • 2014-09-16
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多