Zugriff auf Variable einer Basis-Klasse?



  • Hallo,

    ich habe ein Problem mit dem Zugriff auf einer Variablen in der Basisklasse.

    Basisklasse.h:

    class Basisklasse
    {
    protected:
    
    typedef enum {Up, Down, Right, Left}TDirection;
    TDirection direction;
    [...]
    
    public:
    
    Basisklasse(int x, int y, int z);
    [...und ein paar weitere Methoden]
    };
    

    In dieser Basis-Klasse wird direction für ein switch-case verwendet.

    Unterklasse.h:

    class Unterklasse : public Basisklasse
    {
    public:
    
    Unterklasse(int x, int y, int z);
    [...]
    
    };
    

    Jetzt möchte ich in der Unterklasse direction ändern
    Unterklasse.cpp:

    Unterklasse::Basisklasse_P1(int x, int y, int z)
    :Basisklasse(x, y, z)
    {
    }
    
    void chg_direction()
    {
    [...]
    if (direction != Down)
    {
    direction = Up;
    break;
    }
    [...]
    }
    

    Allerdings kommt dann immer der Error:
    error C2065: 'direction': nichtdeklarierter Bezeichner
    Ebenso für Down, Up, usw...

    Funktioniert so ein Zugriff allgemein nicht oder mache ich irgendwas falsch? *.h Dateien sind eigentlich alle eingefügt.

    Schonmal vielen Dank!



  • chg_direction ist keine Memberfunktion. Falsch abgeschrieben? Keine Ahnung, aber eine bessere Erklärung fällt mir nicht ein, normalerweise geht sowas.



  • Oh, hab ich nicht hin geschrieben. Also in der Unterklasse.h ist void chg_direction definiert.

    Allerdings nicht in der Basisklasse. Werd das mal versuchen. Muss man die Methode in der Basisklasse dann auf virtual setzen?

    MfG



  • KaWa schrieb:

    Oh, hab ich nicht hin geschrieben. Also in der Unterklasse.h ist void chg_direction definiert.

    Das mag ja sein, aber das chg_direction was du hier hingeschrieben hast ist nicht die Memberfunktion. Dazu schreibt man bei der Definition

    void Unterklasse::chg_direction()
    ...
    

    Ohne das ' Unterklasse:: ' wäre das eine freie Funktion, die zufällig genauso heißt.


  • Mod

    KaWa schrieb:

    Oh, hab ich nicht hin geschrieben. Also in der Unterklasse.h ist void chg_direction definiert.

    Nein, was Bashar meint ist, dass dein chg_direction in Unterklasse.cpp kein Member von Unterklasse ist, sondern eine freie Funktion ohne jede Verbindung zu Unterklasse. Denn du hast das Unterklasse:: vergessen. Dadurch kann chg_direction auf gar nichts von Unterklasse zugreifen, egal ob geerbt oder nicht.

    Allerdings nicht in der Basisklasse. Werd das mal versuchen. Muss man die Methode in der Basisklasse dann auf virtual setzen?

    Schreib niemals Code den du nicht selber verstehst! virtual hat rein gar nichts mit Zugriffsrechten zu tun.

    edit: Zu langsam...



  • Ihr seid echt super, genau das war´s 👍

    Man man, da hätte ich ja echt noch lange suchen können, weil daran hab ich absolut nicht gedacht 🙄


Anmelden zum Antworten