namespace et include

namespace et include - C++ - Programmation

Marsh Posté le 24-06-2004 à 11:19:40    

Salut,
 
je me demande si on ne peut pas utiliser les namespace pour se passer des #include "***/h"
 
si 2 classes qui ont besoin l'une de l'autre et ki incluent mutuellement leurs .h, en les mettant dans un meme namespace on pourrait se passer des #include, nan?


---------------
Lexi lin gua @ traducteurs FR DE ES IT GB
Reply

Marsh Posté le 24-06-2004 à 11:19:40   

Reply

Marsh Posté le 24-06-2004 à 11:26:42    

namespace et include repondent à deux besoins différents :
 
1/ les directives include permettent de séparer PHYSIQUEMENT (dans des fichiers différents) des déclarations
 
2/ les namespaces permettent de séparer LOGIQUEMENT (dans un même fichier) des déclarations.
 
Grosso modo, un include recopie le contenu textuel d'un fichier dans un autre avant de le compiler, ce qui est différent de l'action du namespace qui est de valider ou d'invalider des droits d'accés.

Reply

Marsh Posté le 24-06-2004 à 11:37:40    

j'ai des merdes avec des includes et je me demandais comment me passer des includes


---------------
Lexi lin gua @ traducteurs FR DE ES IT GB
Reply

Marsh Posté le 24-06-2004 à 11:39:38    

jm1981 a écrit :

j'ai des merdes avec des includes  


cad?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-06-2004 à 11:43:18    

jm1981 a écrit :

j'ai des merdes avec des includes et je me demandais comment me passer des includes

g++ -E fichier.cpp | less

Reply

Marsh Posté le 24-06-2004 à 12:23:10    

en fait, selon l'ordre des includes, la compilation marche ou non
 
et pour un cas précis, si j'inclue un des .h, ça n compile plus du tout


---------------
Lexi lin gua @ traducteurs FR DE ES IT GB
Reply

Marsh Posté le 24-06-2004 à 12:50:04    

oh putain ...

Reply

Marsh Posté le 24-06-2004 à 12:52:38    

j'ai une architecture de classe arborescente et si je place tous les includes au sommet de l'arborescence et que chaque classe inclue le .h de la classe au sommet de l'arborescence, ça chie grave dans la colle [:meganne]


---------------
Lexi lin gua @ traducteurs FR DE ES IT GB
Reply

Marsh Posté le 24-06-2004 à 12:53:34    

c'est que tes .h sont mités

Reply

Marsh Posté le 24-06-2004 à 12:55:35    

manquerait pas des  
#ifndef
#define
#endif
par hasard?:whistle:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-06-2004 à 12:55:35   

Reply

Marsh Posté le 24-06-2004 à 13:14:19    

nan, j'ai bien les  
 
#ifndef  
#define  
#endif
 
d'aileurs ils sont générés automatiquement par Eclipse :D
 
je crois que j'ai des cycles en fait, il va falloir que je mette des includes dans mes cpp


---------------
Lexi lin gua @ traducteurs FR DE ES IT GB
Reply

Marsh Posté le 24-06-2004 à 13:26:23    

mais il ne faut mettre de #include que lorsqu'il y en a besoin. si tu inclues tout un tas de truc dans un .h mais qui lui sont inutiles, là tu prends des risques

Reply

Marsh Posté le 20-09-2004 à 11:36:04    

Salut a tous,  
je profite de ce poste pr poser une question.
Je viens du JAVA, et je me met au C++.
 
Donc je commence tranquil par les petit truc de base, vient les classes, et la ca merdouille. Je suis 1 exemple, classe Personne.
Je fait Personne.h, avec les declaration, et #include <string> pour declarer le nom et prenom en string, et quand je rappel cette classe dans Personne.cpp #include "Personne.h", il me sort un tas de truc genre : 'string' is used as a type, but is  not defined as a type
et impossible de compiler, g oublié des truc ?? certainement, mais quoi ??
 
Les fichiers sont visible ici : http://www.djfx.fr.st/www/cpp
Merci.  :hello:


---------------
Pas oublier les glacons pour l'apero !!
Reply

Marsh Posté le 20-09-2004 à 12:23:11    

tiens j'ai un peu le même problème
 
j'ai une classe Segment, une classe Point et mon programme principal
 
dans le segment, j'inclus mon point.h, m'ai j'en ai également besoin dans mon programme principal (en dehors du contexte de segment)
 
alors je l'inclus pas et ca fonctionne, mais d'un autre coté la logique serait qu'il soit inclus dans les 2 non?

Reply

Marsh Posté le 20-09-2004 à 12:28:56    

djfx a écrit :

Salut a tous,  
je profite de ce poste pr poser une question.
Je viens du JAVA, et je me met au C++.
 
Donc je commence tranquil par les petit truc de base, vient les classes, et la ca merdouille. Je suis 1 exemple, classe Personne.
Je fait Personne.h, avec les declaration, et #include <string> pour declarer le nom et prenom en string, et quand je rappel cette classe dans Personne.cpp #include "Personne.h", il me sort un tas de truc genre : 'string' is used as a type, but is  not defined as a type
et impossible de compiler, g oublié des truc ?? certainement, mais quoi ??
 
Les fichiers sont visible ici : http://www.djfx.fr.st/www/cpp
Merci.  :hello:


 
 
string se trouve dans le namespace std
Donc soit tu donnes le nom complet de string, qui est std::string, soit tu fais un using namespace std; (qui dira au compila d'aller chercher tout seul dans std::*), au choix.
 
Sinon, bon tu viens du monde java, donc attention a deux trois trucs :
 

Code :
  1. Personne(string lenom, string leprenom, string lannee);


 
Quand tu balances un string comme ca en parametre, le compilo va faire une copie du string (la tu as fait un passage par valeur), qui te prends du tps cpu et un brin de ram pour *strictement* rien. Dans ton cas, un bon entete serait plutot :

Code :
  1. Personne(const std::string &lenom, const std::string &leprenom, const std::string &lannee);


 
(on passe une reference sur le string sans faire de copie, et on met le const pour bien crier au monde entier qu'on ne le modifiera pas)
 
(d'un ot coté, vu que tu debutes, vazy mollo avec les refs & cie, ca peut devenir un sac d'embrouilles :D)  


Message édité par chrisbk le 20-09-2004 à 12:30:08

---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 20-09-2004 à 15:09:02    

Ok merci !
Arf ! Ca marche toujours pas  :??: , maintenant g :  
Exo\Classes\Personne.cpp passing `const std::string' as  `this' argument of `std::basic_string<_CharT, _Traits, _Alloc>&  
 
http://www.djfx.fr.st/www/cpp


---------------
Pas oublier les glacons pour l'apero !!
Reply

Marsh Posté le 20-09-2004 à 15:14:18    

bon quelqu'un lui explique l'initialisation des membres
 
moi je souligne sur que strstream n'existe pas.
<sstream> -> istringstream
 
et tu crois faire quoi là 'istrstream(lannee.data()) >> annee;'  avec ton .data ? istringstream(lannee) >> annee;


Message édité par Taz le 20-09-2004 à 15:15:27
Reply

Marsh Posté le 20-09-2004 à 15:15:37    

djfx a écrit :

Ok merci !
Arf ! Ca marche toujours pas  :??: , maintenant g :  
Exo\Classes\Personne.cpp passing `const std::string' as  `this' argument of `std::basic_string<_CharT, _Traits, _Alloc>&  
 
http://www.djfx.fr.st/www/cpp


 
:D
 

Code :
  1. using namespace std;
  2. Personne::Personne(const std::string &lenom,


 
normalement, si tu fais 'using namespace std' c'est pour te passer du std:: devant le string :o (c'est pas une erreur en soit, mais c'est un peu balot)
 
 
Ensuite ton erreur vient de la :
 

Code :
  1. private:
  2.         const std::string nom;
  3.         const std::string prenom;


 
Ici, pourquoi avoir mis const ? A partir du moment ou tu mets const, tu interdit toute modification a cet objet, hors ton :
 

Code :
  1. nom = lenom;
  2.     prenom = leprenom;


 
va justement tenter de modifier cet objet (et le compilo te jete)
 
deux solutions
 
1/ tu vire le const (mais juste au niveau de la def des variable membre, hein, elle ne sont de toute facon pas accessible depuis l'exterieur, donc c'est pas grave)
 
2/tu utilises la liste d'initialiseur, que tu avais fais avant justement
 
 

Code :
  1. Personne::Personne(const std::string &lenom, const std::string &leprenom, const std::string &lannee) : nom(lenom), prenom(leprenom)
  2. {
  3. ..
  4. }


 
 
mon avis : la solution 1


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 20-09-2004 à 15:16:50    

mon avis : la 2.
 
c'est moi ou y a vraiment un p minuscule apres le 2 ?

Reply

Marsh Posté le 20-09-2004 à 15:18:36    

Taz a écrit :


c'est moi ou y a vraiment un p minuscule apres le 2 ?


gni ?


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 20-09-2004 à 15:19:10    

Personne::personne
 
c'est un bug du truc (comme quand on ::d ?)


Message édité par Taz le 20-09-2004 à 15:19:24
Reply

Marsh Posté le 20-09-2004 à 15:19:20    

ah ouais, encore une jocerie a la con


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 20-09-2004 à 15:49:37    

Super, ca avance ptit a ptit, j'ai pris la solution 1.  :hello:  
Maintenant, c'est la conversion string en int qui coince.
J'ai essayé different truc, trouvé la : http://www.forum.moteurprog.com/in [...] topic=3640
 
Exo\Classes\Personne.cpp cannot convert `const  std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to `
 
mais rien y fait, et si je le test, en faisant direct annee=190, par exemple, a la compil il me sort :  [Linker error] undefined reference to `WinMain@16'
 
Ah oui, une adresse ou on peut avoir le detail des classes ? Les methodes, .... un peu comme en JAVA !  :)


Message édité par djfx le 20-09-2004 à 15:51:34

---------------
Pas oublier les glacons pour l'apero !!
Reply

Marsh Posté le 20-09-2004 à 16:00:43    

http://cplusplus.com/
 
(bibliolink powered http://forum.hardware.fr/hardwaref [...] _sujet.htm )


Message édité par _darkalt3_ le 20-09-2004 à 16:01:51
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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