[英]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.