cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007
-
19 oct. 2004 à 20:08
cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007
-
20 oct. 2004 à 17:38
Bonjour à tous,
ce TP est à rendre pour demain donc j'espere avoir une réponse ce soir.
Le sujet du TP C++ est simple, ecrire 2 classes : liste et maillons.
Le maillon contient un champ :
int data
donc çà marche mais tt c compliqué quand il a fallu tout passer en classe générique ie :
T data
Je n'ai aucune erreur de compilation, mais plusieurs dans les liens.
Ca ne doit vraiment pas etre grand chose.
Je vous poste le debut de chaque fichier, a mon avis c surtout lors des inclusions que ca ne va pas alors que ca marhait tres bien sans les templates
Merci d'avance.
// Suppression de maillons
// liste<T>& operator- (const T&) ; // suppression de la premiere occurence de T
liste<T>& operator- (int) ; // suppression du maillon d'indice donne
// Suppression
liste<T>& supprime_tete() ; // supprime la tete de la liste
liste<T>& supprime() ; // supprime tous les elements de la liste
// Autres methodes et operateurs
liste<T>& insere_tete(const T& d);
liste<T>& insere(const maillon<T>&, int); // les maillons sont numérotés de 0 à nb-1
// insertion d'un maillon à un indice donné
};
-------------------------------------------------------------------------------------
//fichier client.cc qui teste les 2 classes
#include <stdio.h>
#include
#include "liste.h"
int main(int argc, char* argv[])
{
cout << "Test TP2" << endl;
maillon m1(8); //on veut des maillons qui contiennent des int
maillon m2(13);
maillon m3(15);
maillon m4(9);
maillon m5(3);
maillon m6(1233);
liste l1;
cout << m1.get_data() << endl;
l1 + m1 + m2 + 25; // on ajoute deux maillons m1 et m2
// et un maillon qui aura 25 pour data
// à liste l1
l1.insere(m3,0);
l1.insere(m6,8); // insertion à un indice donné
l1.insere(m5,3);
l1.affiche();
l1 - 2; // on supprime le maillon à l'indice 2
cout << l1; // surcharge de << */
//pour eviter que la fenetre ne se referme à la fin de l'execution
char *s;
scanf("%s",s);
cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007 19 oct. 2004 à 21:03
Voilà les erreurs de liens que ca me fait :
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x63):client.cc: undefined reference to `maillon::maillon(int const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x7a):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x9c):client.cc: undefined reference to `maillon::maillon(int const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0xb3):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0xd5):client.cc: undefined reference to `maillon::maillon(int const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0xec):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x10e):client.cc: undefined reference to `maillon::maillon(int const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x125):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x150):client.cc: undefined reference to `maillon::maillon(int const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x16d):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x1a1):client.cc: undefined reference to `maillon::maillon(int const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x1be):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x1e1):client.cc: undefined reference to `liste::liste(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x275):client.cc: undefined reference to `liste::operator+(maillon const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x280):client.cc: undefined reference to `liste::operator+(maillon const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x28b):client.cc: undefined reference to `liste::operator+(int const &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x2a3):client.cc: undefined reference to `liste::insere(maillon const &, int)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x2be):client.cc: undefined reference to `liste::insere(maillon const &, int)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x2d9):client.cc: undefined reference to `liste::insere(maillon const &, int)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x2eb):client.cc: undefined reference to `liste::affiche(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x2ff):client.cc: undefined reference to `liste::operator-(int)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x316):client.cc: undefined reference to `operator<<(ostream &, liste &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x371):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x393):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x3b2):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x3d1):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x3f0):client.cc: undefined reference to `maillon::~maillon(void)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x40f):client.cc: more undefined references to `maillon::~maillon(void)' follow
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text$_$_t5liste1Zi+0x13):client.cc: undefined reference to `liste::supprime(void)'
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007 19 oct. 2004 à 21:05
Donc d'apres doit djl je dois plus me servir des .cc et tout mettre dans le .h ??
Mzis on perd ainsi le concept d'encapsulation, C pas terrible, ya pas d'autres solutions ?
J'attend avec impatience ta réponse.
A tout à l'heure...
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 19 oct. 2004 à 21:09
bah pour mettre les corps des fichiers autre part que direct ds le .h, en c++ on crée des .hpp, ou hxx, ou ce que tu veux qui donne un mix en .h et ".c++":
tu met les declarations ds ton .h, a la fin du .h tu inclus le .hpp
dans le hpp tu met tes corps comme ds un cpp mais en gardant tous les concepts de ton .h: directives d'inclusion conditionnelles, pas de using namespaces, etc...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 19 oct. 2004 à 21:10
ymerej > tu perds rien en encapsulations, ca concerne juste la localisation du code
ce qu'il faut comprendre, c'est que si tu veux que le compilo puisse générer le code, la définition des méthodes doit etre connu a la compilation donc
soit tu mets tout dans le fichier d'entete apres la déclarations de la classes (ca se faist, voir la stl), soit tu mets ca dans un autre fichier (si tu y tien) que tu inclus apres la déclaration de la classe
cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007 19 oct. 2004 à 21:11
Merci leprov mais un peu trop compliqué.
Car ce programme c'est pour un TP que je dois le rendre et on nous a jamais parlé de hpp etc.. dc ca va pas leur plair je pense.
Merci quand même
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 19 oct. 2004 à 21:13
le probleme de mettre ton code ds le .h se trouvera plus tard a la compilation, si tu met ds un hpp tu enleve completement ca. la tu risque d'avoir des probleme de link....
cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007 19 oct. 2004 à 21:14
djl > merci je vais essayer de mettre le maillon.cc dans le .h puis le liste.cc dans le .h tout a l'heure car avant j'ai plusieurs exos en Intelligence Artificielle.
cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007 19 oct. 2004 à 21:17
Oula ca cmmence a faire du charabia là mais merci quand même jdl et leprov.
J'essaies çà tt a l'heure apres mon IA et je vous redis.
J'espere que vous serez dans les parages car a mon avis, ca ne marchera pas du premier coup.
Par contre leprov, je ne comprend pas la difference entre un .cpp (ou.cc) et un .hpp
et pourquoi dis tu que si je met tout dans le .h ca va me donner une erreur de compilation ?
Jdl es tu ok avec leprov sur cela ?
cs_ymerej
Messages postés165Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 5 octobre 2007 19 oct. 2004 à 22:53
ben non :
G mis maillon.cc dans maillon.h
liste.cc dans liste.h et je n'ai pas d'erreur de compilation car j'ai bien pensé a virer les .cc il ne me servent plus donc je les vire sinon evidemment ya une multiple definition.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 19 oct. 2004 à 22:55
non tas pas compris......
si tu fais deux .cc qui tous les deux incluent liste.h et que tes deux .cc sont compilés ds le meme prog tauras un multiple definition, donc faut éviter de mettre le def de fonctions ds ton .h
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 19 oct. 2004 à 23:04
test djl, meme avec les ifndef tu te le taperas....ya pas photo
fait une classe, inclus la dans deux fichiers cpp et compile....tu verras, meme avec tes directives de compil conditionnelle tu te tape la double definition.....