Zugriffsverweigerung private



  • Guten Morgen!
    Ich habe eine Klasse definiert:

    class stack {
    int values[size];
    int stkPtr;
    public:
    void Init();
    bool Push(short zahl);
    bool Pop();
    int retStkPtr(const stack& mystack); //gibt Wert des stkPtr zurück
    };

    Warum funktioniert folgende Implementierung der retStkPtr nicht?

    int retStkPtr(const stack& myStack) {
    return myStack.stkPtr;
    }

    ich erhalte folgende Fehlermeldung:
    S:\...(44) : error C2248: "stkPtr" : Kein Zugriff auf private Element, dessen Deklaration in der Klasse "stack" erfolgte
    S:\...(8) : Siehe Deklaration von 'stkPtr'
    Fehler beim Ausführen von cl.exe.

    Warum habe ich aber in der main-Methode keine Fehlermeldung, in der greife ich doch auch auf den stkPtr zu:

    void main() {
    bool boolean = true;
    speicher.Init();
    short array[size];
    .....
    cout << "Stackpointer: " << speicher.retStkPtr << endl;
    ......

    Lieben Dank für jede Hilfe! 🙂
    Julia



  • Moment bitte, jetzt klappt der Zugriff in der Hauptmethode auch nicht mehr...



  • weil retStkPtr eine freie funktion ist. wenn du die methode der klasse implementieren willst, musst du das auch spezifizieren: stack::retStkPtr



  • julchen81 schrieb:

    Moment bitte, jetzt klappt der Zugriff in der Hauptmethode auch nicht mehr...

    der wird auch nicht funktionieren, solange stkPtr private deklariert ist.



  • Wie kann ich also auf den StkPtr zugreifen? Ist die einzige Möglichkeit, stkPtr public zu setzen??

    Schönen Tag noch, Julia



  • Und der Zugriff aus dem Hauptprogramm ist afaik nichtmal gültiger C++ Code - wenn du auf eine Methode der Klasse zugreifen willst, dann mußt du ihr Parameter mitgeben.

    PS: sfds



  • class stack { 
    int values[size]; 
    int stkPtr; 
    public: 
    void Init(); 
    bool Push(short zahl); 
    bool Pop(); 
    int retStkPtr(const stack& mystack); //gibt Wert des stkPtr zurück 
    }; 
    
    int stack::retStkPtr(const stack& myStack) { // HIER 
    return myStack.stkPtr; 
    }
    

    du musst dem compiler noch mitteilen das "retStkPtr" zu der Klasse "stack" gehört (siehe HIER)

    int stack::retStkPtr(const stack& myStack){..}
    


  • Danke für eure Hilfe!!!!

    Jetzt hab ich's a bissl umgeschrieben und komm jetzt ohne Zugriff auf stkPtr aus...

    Liebe Grüße


Log in to reply