为啥我会得到带有受保护静态成员的 C2248(不可访问成员)?
Posted
技术标签:
【中文标题】为啥我会得到带有受保护静态成员的 C2248(不可访问成员)?【英文标题】:Why do I get C2248 (inaccessible member) with a protected static member?为什么我会得到带有受保护静态成员的 C2248(不可访问成员)? 【发布时间】:2017-03-23 02:13:12 【问题描述】:假设我有:
#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 函数中访问受保护的静态成员?
【问题讨论】:
Derived
通过private
继承自Base
。这是你的意图吗?
std::vector<int> Base::m_intList;
是一个错误,因为未声明 Base
。请发布给出您所询问的错误的确切代码
【参考方案1】:
class Derived : Base
表示class Derived : private Base
。私有继承的行为是:
protected
成员变为派生类的private
成员。
private
基类的成员无权访问作为派生类的成员。
所以m_intList
是:
protected
在Base
private
在Derived
在MoreDerived
无权访问
因此你的错误。
【讨论】:
以上是关于为啥我会得到带有受保护静态成员的 C2248(不可访问成员)?的主要内容,如果未能解决你的问题,请参考以下文章