Statische variable für Objekt-Zählung in c++ - Klassen?
Ich würde gerne eine statische member-Variablen verfolgen, die Menge der Objekte, die gemacht wurden. Etwa so:
class test{
static int count = 0;
public:
test(){
count++;
}
}
Dass nicht funktioniert, da, laut VC++a member with an in-class initializer must be constant
. Also schaute ich mich um und anscheinend Sie tun sollen:
test::count = 0;
Wäre toll, aber ich wollen, zählen zu den privaten.
edit:
Oh boy, ich erkannte, dass ich tun müssen:
int test::count = 0;
Hatte ich gesehen, nur etwas tun test::count = 0
, so bin ich davon ausgegangen, Sie würden sich nicht zu erklären, geben Sie wieder.
Ich würde gerne wissen, ob es einen Weg gibt, dies zu tun in der Klasse, obwohl.
edit2:
Was ich mit:
class test{
private:
static int count;
public:
int getCount(){
return count;
}
test(){
count++;
}
}
int test::count=0;
Nun ist es zu sagen: 'test' followed by 'int' is illegal (did you forget a ';'?)
edit3:
Yup, ich hab vergessen, ein Semikolon nach der Klassendefinition. Ich bin nicht gewöhnt zu tun.
- Sie haben vergessen zu kündigen, Ihre Klassendefinition mit einem
;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzen
In Ihrem Kopf-in der definition der Klasse, und
In der .cpp-Datei. Es wird immer noch privat sein (wenn man die Deklaration in der header in den private-Abschnitt der Klasse).
Der Grund, warum Sie brauchen, das ist, weil
static int count
ist eine Deklaration von Variablen, aber Sie müssen die definition in einer einzelnen Quelldatei, so dass der linker weiß, was Speicherplatz Sie sich beziehen, wenn Sie die Namentest::count
.'test' followed by 'int' is illegal (did you forget a ';'?)
= 0
.int test::count = 0
werden außerhalb der Klasse definiert.;
am Ende der Klasse.Initialisierung der static-variable innerhalb einer Funktion zulässig ist, so kann eine Lösung sein, so etwas wie dieses
im Allgemeinen mit dieser Technik ist es möglich zu arbeiten, um die C++ Einschränkung in Bezug auf statische member-Initialisierung in der Deklaration.
static
Klasse Mitglieder müssen definiert werden (und möglicherweise initialisiert) im namespace-Gültigkeitsbereich, Mitglied Zugriff Regeln nicht gelten.