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

  FORUM HardWare.fr
  Programmation
  C++

  [ANSI C++] Initialisations en tout genre ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ANSI C++] Initialisations en tout genre ...

n°590054
iraysyvalo
Posté le 13-12-2003 à 18:33:07  profilanswer
 


Bonjour.
 
J'ai une classe Foo qui a un membre static const. Comment l'initialiser ?
 
Actuellement, dans Foo.h

Code :
  1. class Foo {
  2. private:
  3. static const string dataFile_;
  4. };
  5. // This initialization doesn't work (link error)
  6. static const string Foo::dataFile_ = "foodata.txt";


 
Le but en fait c'est de passer a 2/3 classes la meme string ..

mood
Publicité
Posté le 13-12-2003 à 18:33:07  profilanswer
 

n°590057
Taz
bisounours-codeur
Posté le 13-12-2003 à 18:36:17  profilanswer
 

Code :
  1. #include <string>
  2. struct Foo
  3. {
  4.   static const std::string BAR;
  5. };
  6. const std::string Foo::BAR = "Ta chatte !";
  7. #include <iostream>
  8. int main()
  9. {
  10.   std::cout << Foo::BAR << '\n';
  11. }

n°590059
Taz
bisounours-codeur
Posté le 13-12-2003 à 18:38:30  profilanswer
 

il va de soit qu'il vaut mieux utiliser le constructeur :o

n°590082
iraysyvalo
Posté le 13-12-2003 à 19:46:34  profilanswer
 


Oui .. mais il faut que les autres classes utilisent la meme string sans recourir au #DEFINE .. Et static parceque tous les objets de cette classe DOIVENT aussi utiliser la meme string ..

n°590083
Taz
bisounours-codeur
Posté le 13-12-2003 à 19:47:58  profilanswer
 

ben tu peux faire une classe de base.  
mais je comprends pas trop ce que tu veux faire en faits

n°590112
iraysyvalo
Posté le 13-12-2003 à 20:29:28  profilanswer
 


Si tu veux, il y a une classe qui definit le fichier (par son nom) pour une autre classe qui implemente les interactions avec le fichier en question.  
 

Code :
  1. // Foo.h
  2. class Foo {
  3.     private
  4.      static const string dataFilename_;
  5.      static FooFile dataFile_;
  6.   };
  7. const string Foo::dataFilename_ = "foodata.txt";
  8. // Foo.cpp
  9. FooFile Foo::dataFile_(dataFilename_); // Another static initialization
  10. ...

n°590113
Taz
bisounours-codeur
Posté le 13-12-2003 à 20:30:49  profilanswer
 

pourquoi dans ce cas dupliquer la variable ?

n°590119
iraysyvalo
Posté le 13-12-2003 à 20:37:26  profilanswer
 


Quelle variable ?

n°590120
Taz
bisounours-codeur
Posté le 13-12-2003 à 20:37:49  profilanswer
 

ben ton nom de fichier :o

n°590122
iraysyvalo
Posté le 13-12-2003 à 20:40:08  profilanswer
 


Je ne duplique rien .. L'une est un nom de fichier et l'autre une classe qui represente le fichier .. ??

mood
Publicité
Posté le 13-12-2003 à 20:40:08  profilanswer
 

n°590123
Taz
bisounours-codeur
Posté le 13-12-2003 à 20:41:39  profilanswer
 

const string Foo::DataFilename_ = "foodata.txt";
   
  // Foo.cpp
  FooFile Foo::DataFile_(dataFilename_);
 
je suis désolé, pour moi t'as 2 trucs là

n°590136
iraysyvalo
Posté le 13-12-2003 à 20:53:05  profilanswer
 

Heu l'une c'est dataFile_ qui est statique puisque tous les objets de cette classe vont se referer au fichier ainsi utilise ..
 
L'autre, c'est dataFilename_ qui indique simplement le nom du fichier en question pour cette version du programme ..


Message édité par iraysyvalo le 13-12-2003 à 21:29:20
n°590139
Taz
bisounours-codeur
Posté le 13-12-2003 à 20:56:49  profilanswer
 

et c'est quoi l'intéret d'avoir 2 fois la meme info ? je comprends rien

n°590153
iraysyvalo
Posté le 13-12-2003 à 21:28:53  profilanswer
 


Je ne veux pas coder en dur le nom de fichier ....

n°590155
Taz
bisounours-codeur
Posté le 13-12-2003 à 21:30:11  profilanswer
 

ben c'est mal barré pour du static const alors :o

n°590189
iraysyvalo
Posté le 13-12-2003 à 22:09:38  profilanswer
 

heu oui .. t'as raison .. disons que comme c'est simplement du code standard independant de tout OS, je ne peux pas gerer des repertoires et un filebrowser et tout ca .. donc pour le moment ce sera static const .. c'est mieux qu'un gros define ou un global const non ?

n°590192
Taz
bisounours-codeur
Posté le 13-12-2003 à 22:22:11  profilanswer
 

le mieux c'est d'utiliser boost, parce que le C++ ne connait même pas la notion de répertoire

n°590217
iraysyvalo
Posté le 13-12-2003 à 23:10:54  profilanswer
 

Heu .. je sais pas ce que c'est boost .. :(
 
J'aimerai avoir ton avis sur le choix des const dans un cas comme celui-la ..  
 
C'est vrai que quand c'est du style const unsigned int bufSize= 32; je le mets plutot en global pour ne pas trainer un :: partout.
 
D'ailleurs c'est comment la facon conseille de declarer ces global const ?? Recourir aux extern ??


Message édité par iraysyvalo le 13-12-2003 à 23:13:21
n°590222
Taz
bisounours-codeur
Posté le 13-12-2003 à 23:18:12  profilanswer
 

je comprends rien à ce que tu veux faire, et comme sur tes derniers posts, tu butais à cause de la syntaxe, je sentirais pas bien ta conception non plus

n°590224
iraysyvalo
Posté le 13-12-2003 à 23:21:45  profilanswer
 


C'est ou le probleme de syntaxe ??

n°590231
Taz
bisounours-codeur
Posté le 13-12-2003 à 23:28:49  profilanswer
 

ben ton erreur à la base, c'est un static en trop :o

n°590234
iraysyvalo
Posté le 13-12-2003 à 23:38:28  profilanswer
 


Oui .. je te fais remarquer que le compilateur ne m'a meme pas fait un warning dessus meme en -ansi -Wall -pedantic.
 
Pour la conception, j'ai deja dit quelque part que j'ai surtout l'habitude du C. Et si je me permets de vous poser des questions ici, c'est pour essayer d'ameliorer tout ca.

n°590236
Taz
bisounours-codeur
Posté le 13-12-2003 à 23:41:35  profilanswer
 

-std=c++98 :o
 
bah on comprends rien à ce que tu veux faire.

n°590248
iraysyvalo
Posté le 14-12-2003 à 00:03:20  profilanswer
 

ok, je mettrais -std la prochaine fois
 
Ce topic, c'est special initialisations diverses .. donc entre autres du bon usage de const pour les constantes sous C++.
 
EDIT: la link error est ailleurs ..


Message édité par iraysyvalo le 14-12-2003 à 00:16:16
n°590252
Taz
bisounours-codeur
Posté le 14-12-2003 à 00:07:48  profilanswer
 

ça c'est une autre histoire, mais bon je sais pas ce que tu fais, le bout de code que je t'ai filé est OK

n°590254
iraysyvalo
Posté le 14-12-2003 à 00:15:31  profilanswer
 


OK, la link error est ailleurs ..
 

n°590533
iraysyvalo
Posté le 14-12-2003 à 17:36:15  profilanswer
 

Plus de link error .... c'etait un tired brain error .. un oubli de cibles .o dans le Makefile .. :( Rigolez pas, ca arrive a tout le monde ! :D

n°590535
Taz
bisounours-codeur
Posté le 14-12-2003 à 17:40:57  profilanswer
 
n°590783
iraysyvalo
Posté le 15-12-2003 à 00:10:42  profilanswer
 


Le meme en Java http://ant.apache.org

n°590788
Taz
bisounours-codeur
Posté le 15-12-2003 à 00:19:01  profilanswer
 

euh rien à voir du tout ant :o
t'arriveras jamais à faire croire à un programmeur C++ que tu peux accéler sa compilation avec un bordel en java et l'améliorer en tappant du XML :o


Message édité par Taz le 15-12-2003 à 00:19:43
n°590810
iraysyvalo
Posté le 15-12-2003 à 01:17:01  profilanswer
 


C'est un build-tool .... sinon ce serait la meme remarque pour scons ... mais pourquoi tu vires au rouge au quart de tour a chaque fois ?

n°590813
Taz
bisounours-codeur
Posté le 15-12-2003 à 01:31:49  profilanswer
 

la coutume ici :o
essaie un peu scons, on va voir si c'est là même chose que ant ...


Message édité par Taz le 15-12-2003 à 01:32:11
n°590935
SoWhatIn22
Posté le 15-12-2003 à 10:43:11  profilanswer
 

ant c'est très bien pour certaines choses. Tu compiles ton projet java, tu génères la doc, et tu fais ton archive java tout bien comme il faut. Maintenant, je ne sais pas si on faire la même chose avec des projets c++, mais il n'empeche. scons c très bien, mais il faut reconnaitre qu'il y a d'autres outils très bien faits, même s'il ne sont pas écrits en pyhton. Celui qui maitrise un outil qui fait ce qu'il veut n'a pas forcément besoin d'apprendre à utiliser autre chose.

n°591163
Taz
bisounours-codeur
Posté le 15-12-2003 à 14:55:40  profilanswer
 

cons est très bien également (similaire à scons mais en Perl, donc avec syntaxe perl)

mood
Publicité
Posté le   profilanswer
 


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

  [ANSI C++] Initialisations en tout genre ...

 

Sujets relatifs
[ANSI C++] Templates[CSS] Heritage ou un truc dans le genre... :D
Où trouver les standard ISO ANSI sur C, C++ ou C#[Help] Codages ASCII, ANSI et unicode
[ANSI - C] Mettre dans un tableau 2 dimensions[Oracle] çà existe un do/for ou un truc du genre ?
[C/C++] Les normes ANSI, c99, et autres?un genre de refresh
[C ANSI] conversion chaine de caractere <=> float ou double[Perl DBI] selectcol_arrayref et autres fonctions du genre : attributs
Plus de sujets relatifs à : [ANSI C++] Initialisations en tout genre ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR