struct B {};
struct D : private B {
B* fun() { return new D; } // ok
}
struct DD : public D {
B* foo() { return 0; } // error: ‘struct B B::B’ is inaccessible !
};
Dieser Fehler scheint mir unvernünftig. Wenn wir den einfachen B*
im globalen Geltungsbereich verwenden können, warum nicht in seinen privat abgeleiteten Klassen? g++ demo.Warum ist eine einfache Erwähnung von Basiszeiger/Referenz in nachfolgenden privat abgeleiteten Klassen verboten?
Wir versuchen nicht DD*
-B*
, zu konvertieren, die von den Sprachregeln verboten ist (this, this, this sind Fragen).
Beachten Sie, dass, wenn ich B* foo()
zu int foo()
ändern, Dinge gut gehen.
MSVC 10.0 beschwert sich mit dem gleichen Fehler. – Yuushi
@Yuushi, behebt MSVC den Fehler mit [Pubbys Antwort] (http://stackoverflow.com/a/13927212/514235)?Ich wollte nur wissen, ob dies der Standard ist, um diesen "Bug" zu beheben. – iammilind
Ja, kompiliert es mit ':: B *'. – Yuushi