簡體   English   中英

如何訪問多個繼承的類中的受保護成員?

[英]How to access protected members in a multiple inherited class?

我想在派生類的構造函數中使用受保護的成員,但無法使用它。 我有一個我嘗試將輸出重定向到標准或其他流的類。 這是我的代碼。 Redirection.h

#include <iostream>
#include <fstream>

class Redirection {
public:
    Redirection(std::ostream &stream)
    :outStream(stream)
    {
    };
    Redirection()
    :Redirection(std::cout)
    {
    };
protected:
    std::ostream &outStream;
};

Derived.h

#include "Redirection.h"

class Derived : public Base, public Redirection
{
public:
    Derived();
    Derived(std::ostream& stream);
    ~Derived();
};

Derived.cpp

#include "Derived.h"

Derived::Derived()
         :Derived(std::cout)  
{
}
Derived::Derived(std::ostream& stream)
         :Base(),
          oustream(stream)
{
}

當我嘗試構建時,出現以下錯誤:

error: class 'Derived' does not have any field named 'outStream'

如果我這樣修改:

    Derived::Derived(std::ostream& stream)
         :Base()              
{
     oustream = stream;
}

我收到以下錯誤:

error: 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator=(const std::basic_ostream<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]' is protected
   basic_ostream& operator=(const basic_ostream&) = delete;
error: within this context: mOutStream = stream;

我遇到這些錯誤是因為多重繼承? 還是您有解決的辦法?

作為注釋中的狀態,使用以下命令:

Derived::Derived(std::ostream& stream) : Base(), Redirection(stream) {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM