c++ - 继承为什么 C++ 编译器在继承的public 和具有相同名称的继承的private 方法之间不区分大小写?

  显示原文与译文双语对照的内容
58 1

我对 C++ 编译器为什么不接受这里问题感到困惑:

 class Foo { 
 private: void Baz() { }
 };
 class Bar {
 public: void Baz() { 
 };
 class FooBar : public Foo, public Bar { };
 void main() {
 FooBar fb;
 fb.Baz();
 }

gcc给出的错误是:

 request for member ‘Baz’ is ambiguous
 candidates are: void Bar::Baz()
 void Foo::Baz()

但是我想要 Bar::Baz(), since Foo::Baz()的private 不明显?为什么编译器在这里不明确?

时间:原作者:0个回答

94 5

名称解析工作在两个阶段。首先查找名称,然后检查名称以获取访问权限。如果名称查找不明确,则从不考虑访问。

为什么,也许它是一种意外的语言设计,但我想更可以能简化解析名称的过程。这些规则已经非常复杂。

原作者:
...