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,我已经更新了我的答案。我希望这可能会有所帮助。