c++ - MSVC 声称公共成员不可访问
问题描述
我有一个带有公共枚举成员的这样的结构:
namespace A {
struct Events {
enum CUES { CLEAR, DATA, ERROR };
virtual void Event(CUES) = 0;
protected:
~Events() {}
};
}
例如,当我尝试CLEAR
从另一个类访问时,编译器会产生一个错误,说它不可访问。
这是代码和错误:
namespace B {
class Base: A::Events{
void Event(Events::CUES){}
protected:
Events::CUES lastCue;
};
class Impl: public Base {
bool test(){
return (lastCue == A::Events::CLEAR);
}
};
}
somefile(19): error C2247: 'A::Events::CLEAR' not accessible because 'B::Base' uses 'private' to inherit from 'A::Events'
somefile(3): note: see declaration of 'A::Events::CLEAR'
如何访问公共枚举?
更新:
gcc
似乎编译这个没有任何麻烦。
解决方案
我想出的解决方案是通过全局命名空间更改访问路径:
namespace B {
class Impl: public Base {
bool test(){
return (lastCue == ::A::Events::CLEAR);
} // ^^
};
}
这样可以避免对Base
.
推荐阅读
- delphi - 在输入 TEdit 时,它会将自身内部的文本加倍
- python - 验证到 staff_user:Django Restframework
- android - 使用泛型访问枚举值
- php - Laravel 将 db 值增加 2 倍
- python - 在python中将多个嵌套的JSON转换为CSV
- javascript - 是否可以在项目中将 CSS 字符串文本更改为 CSS 代码?
- postgresql - 如何使用 PostgreSQL 的“pg_restore”和零停机恢复数据?
- html - 使用 DataTables 如何显示每行输入的金额的累计?
- node.js - NodeJS 以编程方式读取为 Github Pages 中的自定义域创建的 CNAME 文件
- javascript - “你可能需要一个额外的加载器来处理这些加载器的结果。”