Klassen-Methode "is inaccessible", aber dann doch nicht bei Ableitung.. Wie geht das??



  • Hallö!
    Also jetzt habe ich hier mal etwas, dass ich garnicht nachvollziehen kann:
    Ich hantier hier gerade mit wxWidgets rum. Mich interessiert aber allgemein, wie soetwas in C++ möglich ist:

    Ich versuche das mal runter zu brechen. Dabei bin ich mir nicht sicher, wie genau da vererbt wird; darum halb Pseudo-Code.
    Also wir haben:

    class base : wahrscheinlichNochNeBase
    {
       void function(arg);
       //...
    };
    class derived : public/protected/private base;
    //..wobei ich meine, dass es sogar public ist..
    
    derived d;
    d.function(..); //ERROR: ".. is inaccessible within this context"
    
    //Ab hier Eigenkreation:
    
    class myDerived : public derived
    {
       void myFunction(arg){ function(arg); }
    };
    
    myDerived myD;
    myD.myFunction(..); //kein Error!
    

    Ich dachte, ich hätte die Vererbungsgeschichten verstanden.. Aber hier frage ich mich, wie das überhaupt gehen kann?!? 😮

    Vermutlich soll der Nutzer derived.function() nicht ausführen können. Damit meine ich, dass da wahrscheinlich irgendwelche Voodoo-Techniken verwendent werden, die sich mir komplett entziehen.. und die durch das nochmalige Ableiten irgendwie ausgehebelt werden.

    Hat jemand eine Idee, wie das gehen könnte?

    MfG
    ULong



  • Deine void function(arg) wird wohl als protected deklariert worden sein. Damit können abgeleitete Klassen auf diese Funktion zugreifen, von außen gehts aber immer noch nicht. Ist eigentlich kein Voodoo dabei.



  • Also ich habe jetzt mal versucht die Vererbungen zurück zu verfolgen...
    Es wird schon alles 'public' vererbt, und die besagte funktion ist auch 'public'.
    Allerdings gibts dann später ein

    //in Klasse...
    
    protected:
       using::function;
    

    Also für mich ist das schon Voodoo, weil ich ehrlich gesagt keine Ahnung habe, wie es sich mit 'using' allgemein und speziell in Sachen Vererbung verhält (...das gilt auch für typedef...).
    Macht das für dich Sinn? Und wenn ja, könntest du mir dann erklären, was das bedeutet?! Also was bleibt quasi von dem using in der abgeleiteten Klasse? Und warum macht man das überhaupt so und nicht z.B. direkt:

    protected: void function(arg);
    

    Kann man sagen, dass "using" immer etwas mit Namensräumen zutun hat? Und jede Klasse einer ist, oder einen hat? ..Wie gesagt, so recht blicke ich nicht durch..


Anmelden zum Antworten