以下示例代码在Visual C ++中编译得很好:
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
但为什么呢?我期望编译器出错,因为函数main应该无法访问privateData
成员,因为它应该像容器的容器一样private
。
我知道无名结构不是官方C ++的一部分,但这个设计是asinine。
顺便说一句,我还尝试将private
更改为protected
并将struct
更改为union
:看起来编译器拒绝遵守匿名结构上的访问修饰符和嵌套在另一个匿名结构或联合中的联合。
有人可以解释这个功能吗?
答案 0 :(得分:6)
是的,这是一个错误。微软承认反馈报告为is here。
现在,该错误处于“无法修复”状态,并且不清楚何时(如果有的话)它将被解决。有一种奇怪的解决方法,由爱迪生设计集团编写的Visual Studio内置的IntelliSense解析器确实抱怨它。你得到了红色的曲线和信息:
错误:成员“Test.privateData”(在第10行声明)无法访问