【发布时间】:2017-12-23 15:08:55
【问题描述】:
我想像这样使用std::ostream:
int main()
{
std::ostream os;
os << "something ..." << std::endl;
return 0;
}
有一个错误说ostream构造函数被保护:
错误:'std::basic_ostream<_chart _traits>::basic_ostream() [with _CharT = char; _Traits = std::char_traits]' 受到保护。
但我记得operator<< 可以像这样重载:
// In a class.
friend std::ostream & operator<<(std::ostream& out, const String & s) {
out << s.m_s;
return out;
}
关于我的代码为什么不起作用的任何建议?
【问题讨论】:
-
您有
#include <ostream>预处理指令吗?我也不认为有一个无参数的ostream构造函数 - 请参阅here。ostreams 应该被包裹在一个流缓冲区周围 - 你是不是要使用fstream或类似的代替? -
是的,我已经包含了
。我想像重载运算符 -
不,我的意思是
#include <ostream>。在 C++11 之前,仅包含iostream并不总是足以包含ostream(尽管我现在找不到解释这一点的 SO 帖子)。是的 - 如果您将streambuf对象作为参数传入,则只能创建ostream对象。然后ostream将输出到该缓冲区。简单解释见this post。 -
你到底想做什么?用你的最终目标更新你的问题。您实际上不太可能想要使用原始
ostream对象,您更可能想要stringstream或fstream。 -
@Jaden,我已经更新了我的答案。我希望它可能会有所帮助。