Ich habe eine einfache Frage in Bezug auf von einer Klasse erben, die privat von einer Basisklasse erben, das heißt, wir habenPrivat Erbe, Rückkehr Bezug auf statisches Element der Basisklasse
class Base {};
class Heir: private Base {};
class HeirsHeir : public Heir {};
In verstehen, dass HeirsHeir nichts von zugreifen kann 'seine' Basis. Insbesondere kann es keine Methode geben, die einen 'Base &'-Verweis auf sich selbst zurückgibt. Aber warum kann es nicht einen Verweis auf anderen Base-Objekt zurückgeben? Warum also der folgende Code nicht kompilieren:
class Base {};
class Kid : private Base {};
Base instance;
class Grandkid : public Kid
{
const Base &GetInstance () const
{ return instance; }
};
Mindestens mein Compiler (MinGW 5.3, dh gcc für Windows) gibt
error 'class Base Base::Base' is inaccessible at {};
error: within this context const Base &getInstance() const
Für mein Verständnis dieses macht keinen Sinn, da ich nicht tun Rufen Sie den Konstruktor von Base zu diesem Zeitpunkt auf, aber geben Sie eine Referenz (an eine Base-Instanz) zurück.
beachte, dass der Fehler kann durch Verwendung von
const ::Base &GetInstance () const
{ return instance; }
befestigt sein, die sicherlich zu C++ 03 verbunden ist §11.2/3 (siehe [C++ private inheritance and static members/types)
Hinweis: Ein Mitglied einer Die private Basisklasse ist möglicherweise nicht als geerbter Mitgliedsname verfügbar, aber direkt zugänglich.
Aber ich verstehe nicht, warum das notwendig ist. Kann es jemand erklären?
Dank
Chris
aufgelöst wird Tut mir leid, dass ich von Base, Heir, HeirsHeir zu Parent, Kid, Grandkid und wieder zurück gewechselt habe ... –