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
ZeigerpZaehlerstandhinzeigt, und das ist (N)Irgendwo.
Ich denke die Zeile macht überhautp keinen Sinn und kann weg. Außerdem hat wahrscheinlich auchpZaehlerstandü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 undTyp* name;vorziehe. DasNULLbezieht sich aufpZaehlerstandund 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.