为什么我使用受保护的静态成员获得C2248(不可访问的成员)?

Cra*_*aig 1 c++ inheritance

比方说我有:

#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;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我得到"m_intList:无法访问类'MoreDerived'中声明的无法访问的成员".

问题:为什么我不能在派生类的DoStuff函数中访问受保护的静态成员?

M.M*_*M.M 6

class Derived : Base手段class Derived : private Base.私有继承的行为是:

  • protected基类的private成员成为派生类的成员.
  • private基类的成员无权访问派生类的成员.

所以m_intList是:

  • protectedBase
  • privateDerived
  • 没有获得MoreDerived

因此你的错误.