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]'受保护
这是什么意思?我关于构造函数和受保护的所有内容涉及到我公开的关键字保护.
再次阅读消息它没有说你的构造函数是受保护的,它说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的"输出"窗口中,而不是"错误"窗口中,该窗口仅显示摘要.该错误的全文将包含有关错误的更多详细信息,包括(最有可能)类的默认构造函数的名称和行号.
归档时间: |
|
查看次数: |
323 次 |
最近记录: |