static const

static const - C++ - Programmation

Marsh Posté le 18-07-2002 à 01:55:52    

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]
Reply

Marsh Posté le 18-07-2002 à 01:55:52   

Reply

Marsh Posté le 18-07-2002 à 07:35:52    

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+

Reply

Marsh Posté le 18-07-2002 à 08:29:33    

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
Reply

Marsh Posté le 18-07-2002 à 08:55:19    

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

Reply

Marsh Posté le 18-07-2002 à 09:01:49    

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


---------------
Le Tyran
Reply

Marsh Posté le 18-07-2002 à 20:13:51    

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


---------------
Sphincter lent [:morpheus67] smiley mauve © DarkMavis [:humpty dumpty]
Reply

Marsh Posté le 18-07-2002 à 20:31:37    

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]
Reply

Marsh Posté le 18-07-2002 à 20:34:16    

Je savais bien que ça chiait avec visual :D


---------------
Le Tyran
Reply

Marsh Posté le 18-07-2002 à 20:50:38    

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]
Reply

Marsh Posté le 18-07-2002 à 20:54:49    

ouai, me semble que j'ai essayé


---------------
Le Tyran
Reply

Marsh Posté le 18-07-2002 à 20:54:49   

Reply

Marsh Posté le 18-07-2002 à 21:12:06    

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]
Reply

Marsh Posté le 19-07-2002 à 09:53:31    

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

Reply

Marsh Posté le 19-07-2002 à 09:56:18    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed