继承后类无法访问

Mat*_*Mat 3 c++ namespaces

如果您编译下面的代码失败,则说B类无法访问,因为它被用作成员函数func的参数.为什么是这样?

注意:如果D2不从D1继承,则错误消失,因此从D2继承使B无法访问.

namespace myns {
  class B {};
}

using namespace myns;

class D1 : B {};

class D2 : D1 {
  void func(B b) {}
};
Run Code Online (Sandbox Code Playgroud)

Igo*_*nik 5

名称查找查找D2::D1::B,而不是myns::B.在名称查找之后,执行访问检查,并发现它D2::D1::B是私有的.

命名空间是一个红色的鲱鱼:如果B在全局命名空间中定义,则会观察到完全相同的结果.