Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2876 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  static const

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

static const

n°178325
SimonJerem​y
Epais!!!!!!!!!!!!
Posté le 18-07-2002 à 01:55:52  profilanswer
 

j'ai une variable en static const dans une classe .h,  
au debut j'avais mis:

Code :
  1. static const int nbreel=10;


 et j'avais l'erreur error C2258: illegal pure syntax, must be '= 0'  
apres recherche j'ai vu qu'il fallait mettre un constructeur pour initialiser nbreel j'ai donc fait mon constructeur:  

Code :
  1. Nomclasse(){nbreel=10;};


mais la j'ai l'erreur suivante: error C2166: l-value specifies const object
 
qq peut m'aider?


---------------
Sphincter lent [:morpheus67] smiley mauve © DarkMavis [:humpty dumpty]
mood
Publicité
Posté le 18-07-2002 à 01:55:52  profilanswer
 

n°178346
SoWhatIn22
Posté le 18-07-2002 à 07:35:52  profilanswer
 

hello,
 
je ne sais pas si c'est pemis par la norme ou pas, mais beaucoup de compilateurs refusent en effet de faire ce que tu fais. Il faut donc procéder ainsi:
 
1. Tu déclares ta variable dans la déclaration de la classe

Code :
  1. // TOTO.hpp
  2. class TOTO
  3. {
  4.    //...
  5.    static const int nbreel;
  6. };


 
2. Tu affectes la variable à cette valeure dans le fichier de définition de cette classe, en entête de fichier:

Code :
  1. //TOTO.cpp
  2. #include "TOTO.hpp"
  3. const int TOTO::nbreel=10;
  4. // etc... la suite de ton fichier


 
 
Et normalement cela devrait passer.
Souvent, quant tu affectes une variable static const dans la déclaration même de la classe, le compilo croit que tu veux en faire une variable virtuelle pure, et c'est pour cela qu'il attends un =0.
 
D'autre part, affecter la valeur de ta variable dans le construteur est doublement incorrecte:
1. C'est interdit car la c'est une constante. On ne peut donc pas lui affecter de valeur.
2. Si c'était valide, tu initialisera la valeur à chaque fois qu'une instance de la classe est crée.
 
 
a+

n°178352
LetoII
Le dormeur doit se réveiller
Posté le 18-07-2002 à 08:29:33  profilanswer
 

SoWhatIn22 a écrit a écrit :

hello,
 
je ne sais pas si c'est pemis par la norme ou pas, mais beaucoup de compilateurs refusent en effet de faire ce que tu fais. Il faut donc procéder ainsi:
 
1. Tu déclares ta variable dans la déclaration de la classe

Code :
  1. // TOTO.hpp
  2. class TOTO
  3. {
  4.    //...
  5.    static const int nbreel;
  6. };


 
2. Tu affectes la variable à cette valeure dans le fichier de définition de cette classe, en entête de fichier:

Code :
  1. //TOTO.cpp
  2. #include "TOTO.hpp"
  3. const int TOTO::nbreel=10;
  4. // etc... la suite de ton fichier


 
 
Et normalement cela devrait passer.
Souvent, quant tu affectes une variable static const dans la déclaration même de la classe, le compilo croit que tu veux en faire une variable virtuelle pure, et c'est pour cela qu'il attends un =0.
 
D'autre part, affecter la valeur de ta variable dans le construteur est doublement incorrecte:
1. C'est interdit car la c'est une constante. On ne peut donc pas lui affecter de valeur.
2. Si c'était valide, tu initialisera la valeur à chaque fois qu'une instance de la classe est crée.
 
 
a+




 
c'est effectivement comme celà qu'il faut faire, mais s'il travail avec visual ça passe pas, en tout cas sur la version  ,(non pas de polémique sur visual on en a assez parlé :D). Si c le cas ben oublie les membre const.


---------------
Le Tyran
n°178361
SoWhatIn22
Posté le 18-07-2002 à 08:55:19  profilanswer
 

letoII a écrit a écrit :

 
 
c'est effectivement comme celà qu'il faut faire, mais s'il travail avec visual ça passe pas, en tout cas sur la version  ,(non pas de polémique sur visual on en a assez parlé :D). Si c le cas ben oublie les membre const.




 
Bien sûr que cela fonctionne avec Visual. Je viens de faire le test.

Code :
  1. /*
  2. * misc.hxx
  3. */
  4. #ifndef __MISC_HXX__
  5. #define __MISC_HXX__
  6. class MISC
  7. {
  8. public:
  9. MISC(){};
  10. ~MISC(){};
  11.  static const int mycount;
  12.  const int GetCount( );
  13. };
  14. #endif


 

Code :
  1. /*
  2. * misc.cxx
  3. */
  4. #include "misc.hxx"
  5. const int MISC::mycount = 10;
  6. const int MISC::GetCount( )
  7. {
  8. return mycount;
  9. }


 

Code :
  1. /*
  2. * main.cxx
  3. */
  4. #include <iostream>
  5. #include "misc.hxx"
  6. int main( )
  7. {
  8. MISC * lp_misc = new MISC();
  9. int l_int = lp_misc->GetCount();
  10. std::cout << "MISC count is: " << l_int << std::endl;
  11. return 0;
  12. }


 
tu mets tout ca dans une application console, tu compiles et tu lances. Ca fonctionne très bien.
Visual a plein de défauts, mais faut pas pousser quand même :D

n°178364
LetoII
Le dormeur doit se réveiller
Posté le 18-07-2002 à 09:01:49  profilanswer
 

Perso je l'utilise mais j'i un pote qui m'a dit que ça passait pas.
T'as quel version là?


---------------
Le Tyran
n°178374
SimonJerem​y
Epais!!!!!!!!!!!!
Posté le 18-07-2002 à 20:13:51  profilanswer
 

merci bcp pour vos reponses, je vais essayer (j'attendais que le forum ouvre....)


---------------
Sphincter lent [:morpheus67] smiley mauve © DarkMavis [:humpty dumpty]
n°178383
SimonJerem​y
Epais!!!!!!!!!!!!
Posté le 18-07-2002 à 20:31:37  profilanswer
 

ca marche tres bien mais...... encore un petit prob: j'ai un tableau en static const:

Code :
  1. static const double tablbornes[2][8];


et lors de l'affectation:

Code :
  1. const double Individu::tablbornes = {{0,10,20,30,40,50,60,70},{10,20,30,40,50,60,70,80}};


ca me met:
error C2373: 'public: static double const  (*  Individu::tablbornes)[8]' : redefinition; different type modifiers
 [:heinkv]


Message édité par SimonJeremy le 18-07-2002 à 20:32:33

---------------
Sphincter lent [:morpheus67] smiley mauve © DarkMavis [:humpty dumpty]
n°178385
LetoII
Le dormeur doit se réveiller
Posté le 18-07-2002 à 20:34:16  profilanswer
 

Je savais bien que ça chiait avec visual :D


---------------
Le Tyran
n°178395
SimonJerem​y
Epais!!!!!!!!!!!!
Posté le 18-07-2002 à 20:50:38  profilanswer
 

LetoII a écrit a écrit :

Je savais bien que ça chiait avec visual :D




 
merde j'ai visual 6....
ca compile sous GCC?


---------------
Sphincter lent [:morpheus67] smiley mauve © DarkMavis [:humpty dumpty]
n°178401
LetoII
Le dormeur doit se réveiller
Posté le 18-07-2002 à 20:54:49  profilanswer
 

ouai, me semble que j'ai essayé


---------------
Le Tyran
mood
Publicité
Posté le 18-07-2002 à 20:54:49  profilanswer
 

n°178414
SimonJerem​y
Epais!!!!!!!!!!!!
Posté le 18-07-2002 à 21:12:06  profilanswer
 

LetoII a écrit a écrit :

ouai, me semble que j'ai essayé




 
ok merci je vais essayer demain
[:hellov]


---------------
Sphincter lent [:morpheus67] smiley mauve © DarkMavis [:humpty dumpty]
n°178595
ioio
./ioio --force --nodeps
Posté le 19-07-2002 à 09:53:31  profilanswer
 

Est-ce que c'est réellement utile qu'une constante soit statique ? si oui dans quel cas (éclairez moi)

n°178600
LetoII
Le dormeur doit se réveiller
Posté le 19-07-2002 à 09:56:18  profilanswer
 

Ben c utile dans ce cas là par ce que c un mebre de classe, c'est à dire un membre dont la valeur est commune à toutes les instances de la classes.
 


---------------
Le Tyran

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  static const

 

Sujets relatifs
[php] static [ c'est bong][MFC] Afficher un static (image bmp) sur le menu de la dialog
lib static[Java Unix] non-static method cannot be referenced from a static ...
[C++] Créer une image (static control)eJAVA: static an static final
[JAVA - SWING] pb de discussion entre mes éléments... static ?[C++] un static + une adresse de site internet
[MFC] Changer la police d'un Texte Static[MYSQL] erreur EXPLAIN -> Impossible WHERE noticed after reading const
Plus de sujets relatifs à : static const


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)