Jus*_* L. 6 c++ inheritance multiple-inheritance
我很困惑为什么C++编译器不会接受这个:
class Foo {
private: void Baz() { }
};
class Bar {
public: void Baz() {
};
class FooBar : public Foo, public Bar { };
void main() {
FooBar fb;
fb.Baz();
}
Run Code Online (Sandbox Code Playgroud)
gcc给出的错误是:
request for member ‘Baz’ is ambiguous
candidates are: void Bar::Baz()
void Foo::Baz()
Run Code Online (Sandbox Code Playgroud)
但是我想要Bar :: Baz()并不明显,因为Foo :: Baz()是私有的吗?为什么编译器不会在这里消除歧义?
名称解析分两个阶段进行.首先查找名称,然后检查名称以进行访问.如果名称查找不明确,则永远不会考虑访问.
至于为什么,也许这是一个刻意的语言设计,但我认为更可能只是简化解析名称的过程.这些规则已经非常复杂了.