2017-03-23 10 views
0

のは、私が持っているとしましょう:保護された静的メンバーを持つC2248(アクセスできないメンバー)を取得するのはなぜですか?

#include <Windows.h> 
#include <iostream> 
#include <vector> 

std::vector<int> Base::m_intList; 

class Base 
{ 
public: 
    Base(); 
protected: 
    static std::vector<int> m_intList; 
}; 

class Derived : Base 
{ 
public: 
    Derived(); 
protected: 
    bool fWhatever; 
}; 

class MoreDerived : Derived 
{ 
public: 
    MoreDerived(); 
private: 
    HRESULT DoStuff(); 
}; 

Base::Base() 
{ 

} 

Derived::Derived() 
{ 

} 

MoreDerived::MoreDerived() 
{ 

} 

HRESULT MoreDerived::DoStuff() 
{ 
    for (auto it = m_intList.begin(); it != m_intList.end(); it++) 
    { 
     std::cout << *it; 
    } 
} 

を、私はこれをコンパイルしようとすると、私が手に「m_intListを:アクセスできないメンバーが 『MoreDerived』クラスで宣言アクセスすることはできません」。

質問:派生クラスのDoStuff関数で保護された静的メンバーにアクセスできないのはなぜですか?

+0

'Derived'は' Base'を 'private'で継承します。それはあなたの意図ですか? – songyuanyao

+0

'std :: vector Base :: m_intList;は' Base'が宣言されていないのでエラーです。あなたが求めているエラーを与えた正確なコードを投稿してください –

答えて

5

class Derived : Baseは、class Derived : private Baseを意味する。 private継承の動作は次のとおりです。基本クラスの

  • protectedメンバーは、派生クラスのprivateメンバーになります。
  • private基本クラスのメンバーは、派生クラスのメンバーとしてにアクセスできません。

のでm_intListは次のとおりです。Derived

  • Base
  • privateので、MoreDerived
  • でアクセスなしあなたのエラーで

    • protected

    関連する問題