c++ - 为什么 C++ 编译器不区分同名的继承公共(public)方法和继承私有(private)方法?

标签 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();
  }

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/

相关文章:

C# 访问中间类成员 - 而不是基础类(Class)

python numpy array/dict 多重继承

c# - 在同一个类上多次使用通用接口(interface)

c++ - 错误 : no matching function for call to "Queue::Queue()"

java - 如何从 std::string 获取 jchar*?

c++ - 从多个线程同步对共享对象的方法调用

java - 类的多重继承?

C++(在 Linux 下)程序没有给出预期的输出(定时器)

C++ 无法实例化抽象类子类

Android - 创建新的 View 属性并传递给 XML 复合 View 组件中的子级 - 布局中的数据绑定(bind)