Deklaration von statischen Attributen

Hallo,

wenn ich im folgendem Programm das statische Attribut ‚anzahl‘ deklarieren, will bekomme ich die Fehlermeldung „Too many types in declaration“… aber ich weiß nicht, was ich falsch gemacht habe. Kann mir mal jemand auf die Sprünge helfen?

include

include

include

class Counter
{ private:
static int anzahl;
int wert;
public:
Counter()
{ anzahl++;};
~Counter()
{ anzahl–;};
static void zeige()
{ cout

Hallo Oliver!

Bjarne Stroustrup schreibt:
"Eine statische Variable erzeugt für eine Funktion ein >>Gedächtniss

Auf den ersten Blick sieht es fuer mich so aus, als wuerdest Du eine private member ausserhalb der Klasse zu veraendern versuchen.
Ausserdem> warum nochmal int Counter::anzahl ?

void main(){
int Counter::anzahl = 0; // private
Counter::zeige();
{
Counter c1;
c1.zeige();
{
Counter c2;
c2.zeige();
}
Counter::zeige();
}
Counter::zeige();
}

die initialiesierung von anzahl dierekt nach der Klassendefinition also ausserhalb ausserhalb von void main().
static members können genau wie wie memberfunktionen outline deklariert werden.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Auf den ersten Blick sieht es fuer mich so aus, als wuerdest
Du eine private member ausserhalb der Klasse zu veraendern
versuchen.
Ausserdem> warum nochmal int Counter::anzahl ?

bei der ersten Initialisierung sollte das aber gehen!

Ich habe selber noch nie eine statische Variable in einer
Klasse definiert. Die Anweisung static ist nur für die
Funktionen vorgesehen, nicht für die Klassen!

Soweit ich weiß kann man auch für Klassen statistische Attribute und MEthoden definieren.

die initialiesierung von anzahl dierekt nach der
Klassendefinition also ausserhalb ausserhalb von void main().
static members können genau wie wie memberfunktionen outline
deklariert werden.

ja ok, das wars, danke!
die Initialisierung muss außerhalb der Klassendefinition stehen.

Solange die Variable nicht als static const definiert ist, kann mit ihr normal gerechnet werden, auch in main. Aber wie gesagt, Neudeklaration mit int Counter::anzahl wird angemeckert, der Speicher ist schon da.

Ciao Lutz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Auf den ersten Blick sieht es fuer mich so aus, als wuerdest
Du eine private member ausserhalb der Klasse zu veraendern
versuchen.
Ausserdem> warum nochmal int Counter::anzahl ?

bei der ersten Initialisierung sollte das aber gehen!

Solange die Variable nicht als static const definiert ist,
kann mit ihr normal gerechnet werden, auch in main. Aber wie
gesagt, Neudeklaration mit int Counter::anzahl wird
angemeckert, der Speicher ist schon da.

Ich bin noch ein ziemlicher Neuling in Sachen C++, kann sein, daß ich nicht verstehe, was du mir sagen willst, aber die Variable ist doch eindeutig als private deklariert und man kann ihr nur bei der Initialisierung einen Wert zuweisen; alle weiteren Zugriffe gehorchen aber den üblichen Zugriffsrechten.

Selsamerweise wird diese Erstdeklaration nur in main() angemeckert, außerhalb gehts… keine Ahnung wieso, ist aber eigentlich egal… hauptsache es geht!

Grüße
OLIVER

Variable ist doch eindeutig als private deklariert und
man kann ihr nur bei der Initialisierung einen Wert zuweisen;

Hi,
das stimmt nicht ganz. Auf static definierte Felder k"onnen Klassenmethoden und die von friend-Klassen auf jeden Fall zugreifen. main() ist keins von beiden.

Die Initialisierung ausserhalb der Klassendeklaration ist h"asslich und sollte nach M"oglichkeit vermieden werden.

Solche variablen static-Felder kann man z.B. f"ur einen gemeinsamen Z"ahler aller Instanzen einer Klasse verwenden.

Ciao Lutz