Sono confuso sul motivo per cui il compilatore C++ non accetterà questo:Perché il compilatore C++ non disambigura tra un pubblico ereditato e un metodo privato ereditato con lo stesso nome?
class Foo {
private: void Baz() { }
};
class Bar {
public: void Baz() {
};
class FooBar : public Foo, public Bar { };
void main() {
FooBar fb;
fb.Baz();
}
Il gcc errore dà è:
request for member ‘Baz’ is ambiguous
candidates are: void Bar::Baz()
void Foo::Baz()
ma non è ovvio che voglio Bar :: Baz(), dal momento che Foo :: Baz() è privato? Perché il compilatore non disambigui qui?
È un deliberato. Non semplifica il compilatore, al contrario, è leggermente più complicato perché l'accesso deve essere controllato come un ulteriore passaggio. – curiousguy