我很困惑为什么 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() 不是很明显吗,因为 Foo::Baz() 是私有(private)的?为什么编译器不会在这里消除歧义?
最佳答案
名称解析分两个阶段进行。首先查找名称,然后检查名称的访问权限。如果名称查找不明确,则永远不会考虑访问。
至于为什么,可能是故意设计的语言,但我觉得更有可能只是为了简化解析名字的过程。规则已经非常复杂了。
关于c++ - 为什么 C++ 编译器不区分同名的继承公共(public)方法和继承私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209738/