C++ 关于std::ostream构造函数
我想像这样使用C++ 关于std::ostream构造函数,c++,ostream,C++,Ostream,我想像这样使用std::ostream: int main() { std::ostream os; os << "something ..." << std::endl; return 0; } // In a class. friend std::ostream & operator<<(std::ostream& out, const String & s) { out << s.m
std::ostream
:
int main()
{
std::ostream os;
os << "something ..." << std::endl;
return 0;
}
// In a class.
friend std::ostream & operator<<(std::ostream& out, const String & s) {
out << s.m_s;
return out;
}
intmain()
{
std::ostream操作系统;
操作系统中的std::ostream
、std::istream
或std::iostream
是流类型的基类(例如std::stringstream
、std::fstream
等)。这些类受实例化保护,您只能实例化其派生类。错误消息
错误:“std::basic_ostream::basic_ostream()[with _CharT=char;_Traits=std::char_Traits]”受保护
我也这么告诉你
第二个示例是有效的,因为您可以使用对派生类基类的引用。在这种情况下,不调用构造函数,引用只引用现有对象。下面是一个示例,说明如何使用std::ostream&
对std::cout
:
#include <iostream>
int main() {
std::ostream& os = std::cout;
os << "something ..." << std::endl;
}
#包括
int main(){
std::ostream&os=std::cout;
操作系统你有一个#include
预处理器指令吗?我也不认为有一个无参数的ostream
构造函数-请参见。ostream
s应该围绕一个流缓冲区-你是想使用fstream
或类似的指令吗?是的,我已经包含了。我想像上一篇文章那样使用std::ostream加载运算符否,我的意思是#include
。在C++11之前,仅仅包含iostream
并不总是足以包含ostream
(尽管我现在找不到解释这一点的SO帖子)。是-如果将streambuf
对象作为参数传递,则只能创建ostream
对象。然后ostream
将输出到该缓冲区。请参阅以获取简单解释。您实际想做什么?用最终目标更新您的问题。您不太可能真正想要使用原始ostream
object,您更可能需要stringstream
或fstream
@Jaden,我已经更新了我的答案。我希望这可能会有所帮助。