Folco, par définition, un
const est quelque chose de
constant, c'est à utiliser sur tout ce qui ne peut pas changer, évidemment pas sur les variables (qui, par définition,
varient).
Sasume (./382) :
essemblent à ça : const Cercle & fabriqueUnCercle(const Point & centre, const Longueur & rayon);Du coup, et c’est le bonheur du C++, la plupart des prototypes des fonctions r
C'est une mauvaise idée de retourner un
const &, il faut que tu stockes l'objet quelque part où ça reste valide quand la fonction a retourné (une variable locale dans la fonction ne convient pas!), et si la fonction appelante veut stocker la référence pendant plus longtemps, le compilateur ne donnera aucun warning, donc si tu stockes l'objet quelque part dans un
static ou dans une variable membre de l'objet, tu risques d'avoir des problèmes si la fonction est appelée une autre fois entretemps.
Bref, les
const & sont à réserver pour les arguments. Si tu veux pouvoir retourner ton objet sans tout recopier, il faut rendre ta classe implicitement partagée (comme les classes de données de Qt). (Mais il reste plus efficace de passer des
const & comme arguments parce que ça évite de toucher au compteur de références.)
Folco (./388) :
Ah ... Je ne donne aucun chemin... Je partais du principe que le chemin par défaut était celui du TPR, puisqu'un #include "header.h" fonctionne avec le header dans le répertoire du projet. C'est un tort ?
Tu ne peux pas utiliser -I dans l'EDI, du moins pas avec des chemins relatifs (et les -I avec des chemins absolus font que ton projet n'est pas transportable à une autre machine ou même un autre système d'exploitation sur la même machine, donc c'est une mauvaise idée; de plus, ça fait aussi foirer les compilations sans enregistrer, parce qu'un -I référence évidemment la copie enregistrée, pas la copie temporaire).
Le chemin à utiliser est celui de l'arborescence dans l'EDI (dossiers virtuels). Donc un fichier directement dans "Header Files" est à inclure avec
#include "foo.h", un fichier dans le dossier
toto dans "Header Files" est à inclure avec
#include "toto/foo.h" (sauf si ton fichier source est aussi dans le sous-dossier
toto). (Ergo, si tu ne veux pas t'embêter avec les chemins pour les
#include, n'utilise pas les dossiers virtuels. L'emplacement physique du fichier dans ton dossier du projet n'a aucune importance. L'EDI copie tout dans un dossier temporaire et y réalise physiquement l'arborescence virtuelle définie dans le projet.) Et il faut utiliser des "" et pas des <>.
J'ai oublié de préciser : je fais ça sous Win.
Si c'est Vista, désactive UAC, il paraît que ça empêche parfois GCC de trouver les includes pour je ne sais pas quelle raison.