static attribute einer Klasse
-
Ich hab eine Klasse, und möchte, dass bestimme werte nur einmal für die Gesamte Klasse vorkommen, allerdings kommt es bei mir da zu compilerfehlern.
hier ist mein header, in dem der Fehler ist
#ifndef _KLASSE_H #define _KLASSE_H class Klasse{ static int wert; public: static int getint(){ return wert; } static void changeint(int i){ wert = i; } }; #endif /* _KLASSE_H */die Fehlermeldungen sind folgende:
/Klasse.h:8: undefined reference to `Klasse::wert' /Klasse.h:11: undefined reference to `Klasse::wert'ich denke ich hab hier ein sache von Java gelernt, die so ohne weiteres nicht nach c++ übertragbar ist.
-
das
static int wertinnerhalb deiner klassendefinition ist im prinzip nur eine deklaration. du musstwertalso noch in einer übersetzungseinheit deiner wahl definieren://dein_file.cc #include "klasse.h" int Klasse::wert;default initialisierung btw mit 0.
-
Krux schrieb:
ich denke ich hab hier ein sache von Java gelernt, die so ohne weiteres nicht nach c++ übertragbar ist.
Überleg dir doch, ob du vielleicht eigentlich einen Namespace benutzen willst. Weil in Java werden Klassen mit lediglich statischen Methoden ja als Namespace missbraucht.
-
Mr. N schrieb:
Krux schrieb:
ich denke ich hab hier ein sache von Java gelernt, die so ohne weiteres nicht nach c++ übertragbar ist.
Überleg dir doch, ob du vielleicht eigentlich einen Namespace benutzen willst. Weil in Java werden Klassen mit lediglich statischen Methoden ja als Namespace missbraucht.
Ne ich will nur, dass man ein Paar einstellungen global für alle Objekter der Klasse durchführen kann
dass das jetzt etwas anders aussieht liegt daran, dass ich möglichst mein Problem minimalisiert habe.
queer_boy schrieb:
das
static int wertinnerhalb deiner klassendefinition ist im prinzip nur eine deklaration. du musstwertalso noch in einer übersetzungseinheit deiner wahl definieren://dein_file.cc #include "klasse.h" int Klasse::wert;default initialisierung btw mit 0.
also muss ich jetzt da kein static mehr hinschreiben in meiner implementierung?
-
Krux schrieb:
...
also muss ich jetzt da kein static mehr hinschreiben in meiner implementierung?Stimmt !
Aber eher im englischen Sinn ("must not"): Du darfst nicht.
Das sagt Dir aber auch der Compiler, wenn Du's versuchst.
Gruß,
Simon2.
-
Krux schrieb:
Mr. N schrieb:
Krux schrieb:
ich denke ich hab hier ein sache von Java gelernt, die so ohne weiteres nicht nach c++ übertragbar ist.
Überleg dir doch, ob du vielleicht eigentlich einen Namespace benutzen willst. Weil in Java werden Klassen mit lediglich statischen Methoden ja als Namespace missbraucht.
Ne ich will nur, dass man ein Paar einstellungen global für alle Objekter der Klasse durchführen kann
Wenn das so ist, schau dir mal queer_boy's Lösung an.
(das Problem ist, daß die Klassendefinition in mehreren Übersetzungseinheiten eingefügt werden könnte, dein statisches Element aber nur einmal im Programm definiert werden darf. Darum steht in der Klassendefinition nur eine Deklaration und du mußt die Definition später nacholen)