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

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

Marsh Posté le 13-12-2003 à 18:33:07    


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 ..

Reply

Marsh Posté le 13-12-2003 à 18:33:07   

Reply

Marsh Posté le 13-12-2003 à 18:36:17    

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. }

Reply

Marsh Posté le 13-12-2003 à 18:38:30    

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

Reply

Marsh Posté le 13-12-2003 à 19:46:34    


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 ..

Reply

Marsh Posté le 13-12-2003 à 19:47:58    

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

Reply

Marsh Posté le 13-12-2003 à 20:29:28    


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. ...

Reply

Marsh Posté le 13-12-2003 à 20:30:49    

pourquoi dans ce cas dupliquer la variable ?

Reply

Marsh Posté le 13-12-2003 à 20:37:26    


Quelle variable ?

Reply

Marsh Posté le 13-12-2003 à 20:37:49    

ben ton nom de fichier :o

Reply

Marsh Posté le 13-12-2003 à 20:40:08    


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

Reply

Marsh Posté le 13-12-2003 à 20:40:08   

Reply

Marsh Posté le 13-12-2003 à 20:41:39    

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

Reply

Marsh Posté le 13-12-2003 à 20:53:05    

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
Reply

Marsh Posté le 13-12-2003 à 20:56:49    

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

Reply

Marsh Posté le 13-12-2003 à 21:28:53    


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

Reply

Marsh Posté le 13-12-2003 à 21:30:11    

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

Reply

Marsh Posté le 13-12-2003 à 22:09:38    

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 ?

Reply

Marsh Posté le 13-12-2003 à 22:22:11    

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

Reply

Marsh Posté le 13-12-2003 à 23:10:54    

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
Reply

Marsh Posté le 13-12-2003 à 23:18:12    

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

Reply

Marsh Posté le 13-12-2003 à 23:21:45    


C'est ou le probleme de syntaxe ??

Reply

Marsh Posté le 13-12-2003 à 23:28:49    

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

Reply

Marsh Posté le 13-12-2003 à 23:38:28    


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.

Reply

Marsh Posté le 13-12-2003 à 23:41:35    

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

Reply

Marsh Posté le 14-12-2003 à 00:03:20    

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
Reply

Marsh Posté le 14-12-2003 à 00:07:48    

ç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

Reply

Marsh Posté le 14-12-2003 à 00:15:31    


OK, la link error est ailleurs ..
 

Reply

Marsh Posté le 14-12-2003 à 17:36:15    

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

Reply

Marsh Posté le 14-12-2003 à 17:40:57    

Reply

Marsh Posté le 15-12-2003 à 00:10:42    


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

Reply

Marsh Posté le 15-12-2003 à 00:19:01    

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
Reply

Marsh Posté le 15-12-2003 à 01:17:01    


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 ?

Reply

Marsh Posté le 15-12-2003 à 01:31:49    

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
Reply

Marsh Posté le 15-12-2003 à 10:43:11    

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.

Reply

Marsh Posté le 15-12-2003 à 14:55:40    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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