Statique de la variable pour le nombre d'objets dans des classes c++?
Je voudrais avoir une variable membre statique de garder une trace de la quantité des objets qui ont été faites. Comme:
class test{
static int count = 0;
public:
test(){
count++;
}
}
Qui ne fonctionne pas parce que, en fonction de VC++, a member with an in-class initializer must be constant
. J'ai donc regardé autour et apparemment, vous êtes censé faire:
test::count = 0;
Qui serait génial, mais je veux compter pour être privé.
edit:
Oh la la, je viens de réaliser que j'ai besoin de le faire:
int test::count = 0;
J'avais vu quelque chose de juste ne test::count = 0
, donc, je suppose que vous n'aurez pas à déclarer de type nouveau.
Je voudrais savoir si il existe un moyen de le faire à l'intérieur de la classe.
edit2:
Ce que je suis en utilisant:
class test{
private:
static int count;
public:
int getCount(){
return count;
}
test(){
count++;
}
}
int test::count=0;
Maintenant, c'est de dire: 'test' followed by 'int' is illegal (did you forget a ';'?)
edit3:
Yup, j'ai oublié un point-virgule après la définition de la classe. Je n'ai pas l'habitude d'avoir à le faire.
;
OriginalL'auteur mowwwalker | 2011-10-15
Vous devez vous connecter pour publier un commentaire.
Mettre
Dans votre en-tête dans la définition de classe, et
Dans le .fichier cpp. Il sera toujours privé (si vous laissez la déclaration dans l'en-tête de la section privée de la classe).
La raison, vous avez besoin c'est parce que
static int count
est une déclaration de variable, mais vous avez besoin de la définition dans un fichier source unique, de sorte que l'éditeur de liens ne sait ce que l'emplacement de la mémoire, vous faites référence lorsque vous utilisez le nomtest::count
.'test' followed by 'int' is illegal (did you forget a ';'?)
collez le code que vous avez écrit. Notez que l'en-tête doit rester la même qu'avant, sauf supprimer la
= 0
.Tout est dans le même fichier en passant, je n'ai pas séparés. Est-ce un problème?
si c'est tout dans le même fichier, alors vous devez vous assurer que votre fichier est inclus seulement une fois dans l'ensemble de votre projet. S'il est inclus plus d'une fois, vous aurez une définition de plusieurs d'erreur. Et de préciser, le
int test::count = 0
doit être en dehors de la définition de la classe.et vous avez oublié les
;
à la fin de votre classe.OriginalL'auteur Seth Carnegie
De l'initialisation de la variable static dans une fonction est autorisée si une solution peut être quelque chose comme ceci
en général à l'aide de cette technique, il est possible de contourner le C++ limitation en ce qui concerne statique de l'initialisation de membre dans la déclaration.
OriginalL'auteur elxala
static
les membres de la classe doit être définie (et peut-être initialisé) à l'espace de noms de champ d'application, l'accès des membres règles ne s'appliquent pas.OriginalL'auteur Ben Voigt