我正在使用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表示每个输出操作都写入流的末尾.看到这里.
在弗拉德的回答之后,我刚刚尝试了以下内容(在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 <<.由于我没有足够的声誉点来评论他的答案,但我认为这对其他遇到此问题的人有用,我将其作为答案发布.]
| 归档时间: |
|
| 查看次数: |
21524 次 |
| 最近记录: |