12

以下示例代码在 Visual C++ 中编译得很好:

class Test {
private:
    struct {
        struct {
            int privateData;
        };
    };
};

int main(int, char **)
{
    Test test;
    test.privateData = 0;
    return 0;
}

但为什么?我预计会出现编译器错误,因为privateData函数 main 应该无法访问该成员,因为它应该private像它的容器的容器一样。我知道无名结构不是官方 C++ 的一部分,但这种设计是愚蠢的。

顺便说一句,我还尝试更改privateintoprotectedstructinto union:看起来编译器拒绝尊重嵌套在另一个匿名结构或联合中的匿名结构和联合的访问修饰符。

有人可以解释这个功能吗?

4

1 回答 1

6

是的,这是一个错误。微软承认,反馈报告在这里

目前,该错误处于“无法修复”状态,尚不清楚何时(如果有的话)它会得到解决。有一个有点奇怪的解决方法,由 Edison Design Group 编写的 Visual Studio 中内置的 IntelliSense 解析器确实抱怨它。您会看到红色曲线和消息:

错误:成员“Test.privateData”(在第 10 行声明)不可访问

于 2013-01-10T00:43:44.160 回答