-1

複数のレベルの継承を行うプロジェクトがあります。こんなふうになります

XMLs -> Entity -> Item次に、Itemから継承し、次にEntityから継承する多数のアイテムクラスがあります。これで、各クラスが次のように定義されました。

    class Entity: public XMLs
    {
     public: 
            Entity() {}
            virtual ~Entity() {};
         //other functions
    };

これは私に問題を与えているものです。メイン関数で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]'は保護されています

これは何を意味するのでしょうか?私がコンストラクターと保護についてグーグルで検索するものはすべて、私が公開している場所で保護されたキーワードを含みます。

4

1 に答える 1

5

メッセージをもう一度読んでください。コンストラクターが保護されているとは言われていません。コンストラクターが保護されていると書かれていstd::basic_ostreamます。クラス(またはその親)にはstd::basic_ostream(またはおそらくstd::ostream)メンバーがあり、デフォルトで作成することはできません。引数を使って作成する必要があります。 このページは、から構築する必要があることを示していますbasic_streambuf<Elem, Tr>*

次に、外挿しstd::ostreamます。クラスのメンバーは実際には必要ないか、特定の派生型が必要か、参照が必要か、(ほとんどの場合)不明または変更可能な派生型が必要です。ただし、最初の2つのケースに対処するための巧妙な方法ではクラスがコピーできなくなるため、最終的な解決策は実質的に常に同じstd::unique_ptr<std::ostream>です。クラスがストリームを所有している場合は代わりに、他のstd::ostream*誰かがストリームを所有している場合は代わりに使用します。

最後に、エラーの全文はVisual Studioの「出力」ウィンドウにあり、要約だけが表示される「エラー」ウィンドウにはありません。そのエラーの全文には、クラスのデフォルトコンストラクターの名前や行番号など、エラーに関する詳細が含まれている可能性があります。

于 2013-02-11T22:50:38.527 に答える