namespace et include - C++ - Programmation
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.
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
Marsh Posté le 24-06-2004 à 11:39:38
jm1981 a écrit : j'ai des merdes avec des includes |
cad?
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
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
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
Marsh Posté le 24-06-2004 à 12:55:35
manquerait pas des
#ifndef
#define
#endif
par hasard?:whistle:
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
je crois que j'ai des cycles en fait, il va falloir que je mette des includes dans mes cpp
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
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.
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?
Marsh Posté le 20-09-2004 à 12:28:56
djfx a écrit : Salut a tous, |
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 :
|
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 :
|
(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 )
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
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;
Marsh Posté le 20-09-2004 à 15:15:37
djfx a écrit : Ok merci ! |
Code :
|
normalement, si tu fais 'using namespace std' c'est pour te passer du std:: devant le string (c'est pas une erreur en soit, mais c'est un peu balot)
Ensuite ton erreur vient de la :
Code :
|
Ici, pourquoi avoir mis const ? A partir du moment ou tu mets const, tu interdit toute modification a cet objet, hors ton :
Code :
|
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 :
|
mon avis : la solution 1
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 ?
Marsh Posté le 20-09-2004 à 15:18:36
Taz a écrit : |
gni ?
Marsh Posté le 20-09-2004 à 15:19:10
Personne::personne
c'est un bug du truc (comme quand on ::d ?)
Marsh Posté le 20-09-2004 à 15:19:20
ah ouais, encore une jocerie a la con
Marsh Posté le 20-09-2004 à 15:49:37
Super, ca avance ptit a ptit, j'ai pris la solution 1.
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 !
Marsh Posté le 20-09-2004 à 16:00:43
http://cplusplus.com/
(bibliolink powered http://forum.hardware.fr/hardwaref [...] _sujet.htm )
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