| ||||||||||
Il faut d'abord nous créer un dossier build : mkdir build Ensuite on entre dedans : cd build On appel CMake : cmake .. -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Configuring done -- Generating done On appel make : make Scanning dependencies of target crustace [ 33%] Building CXX object CMakeFiles/crustace.dir/crustace.cpp.o [ 66%] Building CXX object CMakeFiles/crustace.dir/crevette.cpp.o [100%] Building CXX object CMakeFiles/crustace.dir/main.cpp.o Linking CXX executable crustace [100%] Built target crustace Et lance le programme : ./crustace constructeur de Crustace je m’appelle crustacé destructeur de crevette destructeur de Crustace Il n'y a pas d'appel au constructeur de Crevette car on ne l'a pas définit (on s'est servit de l'héritage). Mais c'est nul, on a pas donné de nom à la Crevette. Et bien faisons le. Voici ne nouveaux fichier main.cpp :
Compilons avec make : make Scanning dependencies of target crustace [ 33%] Building CXX object CMakeFiles/crustace.dir/main.cpp.o main.cpp: In function ‘int main(int, char**)’: main.cpp:8:26: erreur: no matching function for call to ‘Crevette::Crevette(const char [5])’ main.cpp:8:26: note: candidates are: crevette.h:10:7: note: Crevette::Crevette() crevette.h:10:7: note: candidate expects 0 arguments, 1 provided crevette.h:10:7: note: Crevette::Crevette(const Crevette&) crevette.h:10:7: note: no known conversion for argument 1 from ‘const char [5]’ to ‘const Crevette& make[2]: *** [CMakeFiles/crustace.dir/main.cpp.o] Erreur 1 make[1]: *** [CMakeFiles/crustace.dir/all] Erreur 2 make: *** [all] Erreur 2 Arg, au secours ça ne marche pas. Bon, regardons de que nous dit le compilateur (je vous ai enlever les chemins vers le fichiers pour que l'on puisse y voir quelque chose). Voici la ligne qui nous intéresse : main.cpp:8:26: erreur: no matching function for call to ‘Crevette::Crevette(const char [5])’ Il nous dit qu'il ne connaît pas de constructeur prenant une chaîne de caractère comme argument. Mais il est définit ce constructeur dans crustace.h. Oui, mais l'héritage du constructeur ne concerne que le constructeur par défaut (qui ne prend pas de paramètre dans notre cas). Car ce constructeur :
Équivaux à ces deux là :
Avec un nom par défaut donner au constructeur sans paramètre. Donc, lorsque Crevette hérite de Crustace, elle n'hérite que du constructeur par défaut. Mais nous allons remédier à cela. Nous allons écrire le même constructeur pour Crevette que celui de Crustace. D'abord le prototype (crevette.h) :
Et voici l’implémentation (crevette.cpp) :
L'appel :Crustace(nom) juste après le nom de la fonction est un appel au constructeur de Crustace. En effet une Crevette ne sait pas comment se construit un Crustace elle doit donc appeler le constructeur de Crustace pour se construire complètement. Nous pouvons maintenant recompiler le tout : make Scanning dependencies of target crustace [ 33%] Building CXX object CMakeFiles/crustace.dir/crevette.cpp.o [ 66%] Building CXX object CMakeFiles/crustace.dir/main.cpp.o Linking CXX executable crustace [100%] Built target crustace Et exécuter le programme : ./crustace constructeur de Crustace je m’appelle Bond destructeur de crevette destructeur de Crustace Voilà, notre Crevette à le bon nom. | ||||||||||
|