繁体   English   中英

为什么我的C2248(无法访问的成员)具有受保护的静态成员?

[英]Why do I get C2248 (inaccessible member) with a protected static member?

假设我有:

#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函数中访问受保护的静态成员?

class Derived : Base表示class Derived : private Base 私有继承的行为是:

  • protected的基类成员成为派生类的private成员。
  • 基类的private成员无权作为派生类的成员。

所以m_intList是:

  • Base protected
  • private Derived
  • MoreDerived 无法访问

因此你的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM