Zugriff auf member variable
-
Hallo,
ich habe folgende Frage.
class x { int var; x(); }; void interrupt() { x::var++; }Also ich hoffe mal es ist verständlich was ich da versuche. Natürlich funktioniert das hier nicht so, weil kein Objekt von x erstellt wurde und/oder var nicht static deklariert wurde.
Ich habe einen Interrupt, der Zugriff auf eine Variable einer Klasse benötigt. Meine Frage lautet, gibt es eine Möglichkeit - ohne die Variable var static zu deklarieren - die es mir ermöglicht auf diese über interrupt()
zugreifen zu können? Ich weiss zwar nicht ob diese Info was bringt, aber die Klasse als auch die Funktion befinden sich in der selben Header File. Ich bin leider nicht auf eine Idee gekommen wie man es lösen könnte. Ich hoffe mal ihr könnt mir da weiter helfen.
Danke
-
Ohne dass du ein Objekt der Klasse hast, kannst du auf gar keine nicht-statischen Daten zugreifen.
-
Also gibts doch keinen Ausweg.. Es sei denn ich würde die Variable global definieren und somit der Klasse als auch der Funktion zur Verfügung stellen, oder?
-
Was heisst hier Ausweg? Natürlich kannst du nicht auf etwas zugreifen, das du nicht einmal kennst! Überleg dir, was eine nicht-statische Membervariable bedeutet.
Warum genau darf die Variable nicht statisch sein?
-
Also ich hab folgendes..
template<typename type = unsigned long> class myClass { type variable; myClass(); } void interrupt() { variable++; }In der Interrupt Routine soll jede ms die variable hochgezählt werden. Ich habe noch weitere Funktionen, welche darauf zugreifen welche nicht static sind. Ansonsten müsste ich alle Funktionen als static deklarieren.
-
Aber wie es aussieht ist das der einzigste ausweg der mir einfällt, alle Funktionen die einen Zugriff auf diese variable haben als static zu deklarieren. Ich wollte nur mal nachfragen ob es evtl. andere Lösungsansätze gibt.
-
Mir scheint, du verstehst das Problem nicht. Nochmals: Um auf eine nicht-statische Membervariable zuzugreifen, brauchst du das Objekt der Klasse, zu dem die Variable gehört. Irgendwo muss sie ja gespeichert sein, und ohne zu wissen wo, ist ein Zugriff logischerweise nicht möglich. Soweit klar?
Also entweder sorgst du dafür, dass deine Interrupt-Funktion das Objekt kennt, oder du machst die Membervariable statisch!