Mehrere Instanzen einer Klasse greifen auf eine Variable zu, Probleme?



  • Hallo liebe Community,

    ich (Neuling) versuche gerade ein Programm zu schreiben, welches eine Variable von mehreren Instanzen einer Klasse verändern soll.

    In dem speziellen Fall möchte ich ein Programm schreiben, welches die folgende Aufgabenstellung lösen soll. Ein Raum, mehrere Türen, ein System detektiert die Leute die rein und rausgehen, so dass immer bekannt ist, wieviele Personen im Raum sind.

    Leider bekomme ich das nur mit globalen Variablen hin. Meine Alternative zu den globalen Variablen findet ihr im Anhang, leider läuft das Programm nicht, es geht immer nur ein leeres cmd-Fenster auf und eine Meldung, ob ein Problembericht an Microsoft gesendet werden soll.

    Ich glaube, mein Problem ist ganz einfach, dass ich so tue, als gäbe es keine Klasse, kenne aber auch keine Alternative (evtl. über Speicherreservierung mit new?).

    Hoffe, ihr könnt mir helfen. PS. habe nur den für dieses Problem relevanten Teil reingepackt, die Auswahl mit Switch-Case habe ich aus Platzgründe hier wieder rausgenommen. Als Entwicklungsumgebung habe ich Visual C++ (Express Edition).

    Gruß,
    Sanjo

    #include <iostream>
    
    using namespace std;
    
    //Klasse
    
    class CTuerzaehler
    {
       private:
    
       //Membervariablen oder Attribute
    
       int Zaehlerstand;
       int *pZaehlerstand;
    
       public:
    
       //Memberfunktionen oder Methoden
    
       CTuerzaehler()
       {
       Zaehlerstand = 0;
       *pZaehlerstand = NULL;
    
       pZaehlerstand = &Zaehlerstand;
       }
    };
    
    //Hauptprogramm
    
    int main()
    {
       CTuerzaehler Tuer1;
    
       return 0;
    }
    


  • *pZaehlerstand = NULL;
    

    Ich glaube dass ist nicht was du machen möchtest. Der * ist hier Dereferenzoierungsopertaor. Du versuchst also NULL dahinzuschreiben wo der
    Zeiger pZaehlerstand hinzeigt, und das ist (N)Irgendwo.
    Ich denke die Zeile macht überhautp keinen Sinn und kann weg. Außerdem hat wahrscheinlich auch pZaehlerstand überhaupt keinen Sinn oder?



  • So wie ich es verstanden habe, brauchst du eine Variable, die immer die
    Gesamtanzahl der im Raum befindlichen Personen beinhaltet?

    Sanjo386 schrieb:

    welches eine Variable von mehreren Instanzen einer Klasse verändern soll

    Würde hier auch zu static tendieren. Viele Instanzen einer Klasse müssen
    auf einen Wert zugreifen, der für alle Instanzen gleich ist?

    Also quasi ein

    static int Zaehlerstand;
    

    Den Pointer brauchst du dann nicht, wobei ich den Sinn dieses welchen eh nicht verstanden hab 😃

    Sanjo386 schrieb:

    ob ein Problembericht an Microsoft gesendet werden soll.

    Send ruhig, die freuen sich über Post 🤡



  • Hui, das ging ja schnell, super!

    @brotbernd & BasicMan01:
    Was habe ich mir bei

    *pZaehlerstand = NULL;
    

    gedacht?
    Ich habe schonmal ein ähnliches Programm (Variable über Adresse geändert, aber ohne Klassen oder so) geschrieben. Da habe ich diese Zeile bei der Initialisierung verwendet, um den Pointer auf eine definierte Startadresse zeigen zu lassen, das sah dann ungefähr so aus:

    int *pZaehlerstand = NULL;
    

    .
    Also bei der Variablendeklaration. Da man bei Klassen Anfangswerte nur im Konstruktor angeben kann, dachte ich mir, vllt. klappts ja so.

    @Basicman01:
    Die Variable wird dann also mit static im protected (oder Private) Teil deklariert, richtig?

    Gruß,
    Sanjo386



  • ob du sie private, protected oder public machst, hängt von der weiteren Verwendung ab. Prinzipiell sollte man die Sichtbarkeiten klein halten.
    Also wenn du derzeit keine Vererbung benötigst, reicht private. Du kannst
    ja mit einem getter die Sachen dann zurückliefern lassen.



  • Sanjo386 schrieb:

    *pZaehlerstand = NULL;
    

    Das ist der Grund, warum ich die Variante Typ *name; eigentlich nicht so mag und Typ* name; vorziehe. Das NULL bezieht sich auf pZaehlerstand und nicht auf *pZaehlerstand . Korrekt müssten es also heißen:

    pZaehlerstand = NULL;
    

    Damit du das gleiche Verhalten hast.

    Ich glaube aber, dass du Zeiger noch nicht 100%-ig verstanden hast. Du solltest dir also diesbezüglich noch ein bisschen Literatur nahebringen.



  • [quote="ipsec"]

    Sanjo386 schrieb:

    Korrekt müssten es also heißen:

    pZaehlerstand = NULL;
    

    Damit du das gleiche Verhalten hast.

    Ja, so hats geklappt, danke.
    Habs aber auch mit static probiert, das ist mir entfallen. Boah, das ist immer so schwer sich, alles zu merken, was man mal gelesen hat.


Anmelden zum Antworten