Je decouvre une a une les subtilites de l'ISO C++, jusque la rien a dire, ca tourne bien et c'est plutot plus logique que le C++ "bidouille" dont j'avais l'habitude. Mais la crack un pepin que je n'arrive pas a contourner de maniere elegante.
Je suis en train de creer une classe pour laquelle j'ai besoin d'un compteur de reference. Je declare donc un static int que j'incremente dans le constructeur et decremente dans le destructeur (methode classique que j'utilise sans reflechir depuis des annees). Sauf que la crack :
"ISO C++ forbids in-class initialization of non-const static member"
la ligne qui deplait vient du prototype de la classe :
static int compteur = 0 ;
Quelqu'un a une solution (bien sur je pourrais creer une variable exterieure a la classe et l'incrementer a la main lors de la creation de classe mais c'est pas beau)
Aussi vu que c'est interdit, j'imagine que ca doit etre "mal" de faire come ca, si quelqu'un pouvait m'expliquer pourquoi ca serait vraiment sympa.
Kha
# Re: ISO C++ et reference de classe
Posté par Sol Weintraub . Évalué à 3.
class Truc {
// ...
static int compteur;
};
L'initialisation se fait hors de la déclaration, en haut de ton fichier d'implémentation par exemple :
int Truc::compteur = 0;
[^] # Re: ISO C++ et reference de classe
Posté par Gauthier Monserand (site web personnel) . Évalué à 1.
int Truc::compteur;
[^] # Re: ISO C++ et reference de classe
Posté par Jerome Herman . Évalué à 1.
Il faut declarer les variables statiques en premier (avant tout le reste) sinon le linker ne s'y retrouve plus.
Merci encore
Kha
[^] # Re: ISO C++ et reference de classe
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 1.
primo en C++ on n'initialise jamais dans la declaration,
il y a le constructeur a cet effet.
deuxio cette variable va etre une variable de classe donc
partagée entre plusieurs classes et donc l'initialiser par
chaque classe serait ... illogique.
Par contre j'aimerai bien savoir avec quel compilo ce genre
de code marchait parce que la 1 c un bug et 2 meme gcc-2.95 le refusait ...
# Re: ISO C++ et reference de classe
Posté par enicolas . Évalué à 1.
Je sais qu'avec Visual C++ 6 par exemple ça ne passe pas, mais c'est parce que le compilateur n'est pas ISO-C++ standard justement...
[^] # Re: ISO C++ et reference de classe
Posté par Jerome Herman . Évalué à 2.
Kha
# Re: ISO C++ et reference de classe
Posté par Dugland Bob . Évalué à 1.
C'est un compteur d'_instances_ que tu veux faire et non un compteur de références.
[^] # Re: ISO C++ et reference de classe
Posté par Jerome Herman . Évalué à 1.
Desole
Kha
[^] # Re: ISO C++ et reference de classe
Posté par ggins . Évalué à 1.
Le copy-constructor fourni par le compilo par defaut n'effectue en effet qu'une une copie bit à bit sans modifier ledit compteur.
Ok, j'arrive un peu tard sur le sujet, et tu es peut-être (probablement?) déjà au courant, m'enfin....
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.