我想创建一个具有ostream的所有功能的类,以及我添加的一些功能。我添加的功能 因为我甚至没有开始写它们并得到错误而遗失了:(
这是我的源代码
#include "stdafx.h"
#include "iostream"
using namespace std;
class my_ostream : ostream {};
int main() {
my_ostream my_cout; // my_cout is underlined
my_cout << "Hello World!";
}
这是我得到的错误
IntelliSense: the default constructor of "my_ostream"
cannot be referenced -- it is a deleted function
我知道这意味着什么,但默认构造函数应该是可访问的,因为ostream中有一个并且它是继承的。那么我为什么不能使用它呢? 因为我觉得我也应该...... :○
感谢您阅读&lt; 3并帮助我解决这个简单的问题
亚历
答案 0 :(得分:1)
这有点蠢(可能甚至真的很icky)但是如果你可以容忍使用相同的输出缓冲区有两个输出类,那么OP就不会参加比赛了。如果你愿意,你可以窃取cout的缓冲区然后将cout指向另一个缓冲区以防止交叉污染。这可能会给那些期待好的人带来令人讨厌的惊喜。 cout工作,所以缓冲共享可能更糟。
#include <iostream>
class my_ostream: public std::ostream
{
public:
my_ostream():std::ostream(std::cout.rdbuf())
{
}
//extra functionality goes here
};
int main(int argc, char * argv[])
{
my_ostream my_cout; // my_cout is underlined
my_cout << "My Hello World!" <<std::endl;
std::cout << "cout Hello World!" <<std::endl;
}
答案 1 :(得分:-1)
那是因为你私下继承了ostream。试试:
class my_ostream : public ostream {};
评论:或许我应该指出,由于多种原因继承标准对象总是有点冒险。您是否考虑使用构图而不是继承?
编辑:虽然上面的解决方案适用于gcc(请参阅注释),但它不适用于MSVC。但这与ostream一致:您也无法创建默认构造的ostream
。您必须从ostream
指针construct my_ostream
(以及streambuf
)netcat for Windows。解决方法:
class my_ostream : public ostream
{
public:
my_ostream() : ostream(nullptr) {} // workaround
};