C++类构造函数定义了public,表示它受到保护

zbu*_*s12 -1 c++ inheritance constructor protected public

我有一个项目具有多级继承.它是这样的

XMLs -> Entity -> Item然后有许多项继承自Item,然后从Entity继承.现在,我按照所示定义了每个类

    class Entity: public XMLs
    {
     public: 
            Entity() {}
            virtual ~Entity() {};
         //other functions
    };
Run Code Online (Sandbox Code Playgroud)

这是给我带来麻烦的.每当我尝试在我的main函数中创建一个Item对象或任何类型的对象时,它会给我以下错误

/usr/include/c++/4.6/ostream:在构造函数'Entity :: Entity()'中:/usr/include/c++/4.6/ostream:363:7:错误:'std :: basic_ostream <_CharT,_Traits>: :basic_ostream()[with _CharT = char,_Traits = std :: char_traits]'受保护

这是什么意思?我关于构造函数和受保护的所有内容涉及到我公开的关键字保护.

Moo*_*uck 5

再次阅读消息它没有说你的构造函数是受保护的,它说std::basic_ostream构造函数是受保护的.您的类(或其父类)具有std::basic_ostream(或可能std::ostream)成员,该成员不能默认构造.您必须使用参数构造它. 此页面显示它必须由a来构建basic_streambuf<Elem, Tr>*.

现在我要推断:你可能实际上并不想要std::ostream你的类中的成员,你可能想要一个特定派生类型,或者你想要一个引用,或者(很可能)一个未知或可变的派生类型.但是,由于解决前两种情况的方法使得你的类不可复制,最终的解决方案实际上总是相同的:std::unique_ptr<std::ostream>如果你的类拥有流,或者std::ostream*如果其他人拥有它,则使用a .

最后:错误的全文位于Visual Studio的"输出"窗口中,而不是"错误"窗口中,该窗口仅显示摘要.该错误的全文将包含有关错误的更多详细信息,包括(最有可能)类的默认构造函数的名称和行号.