2

考虑这段代码:

struct A
{
    virtual void foo() {};
};

struct B : private A {};

struct C : private A {};

struct D : A, B, C {};

int main()
{
    D d;
    d.foo(); // Error: ambiguous access of foo (is it A::foo(), B::foo() or C::foo() ?)
}

编译器正在考虑d.foo()一个模棱两可的调用,尽管两者d.B::foo()d.C::foo()对用户来说都是不可访问和隐藏的。唯一有效的调用应该是d.A::foo(),为什么编译器会模棱两可?

4

0 回答 0