Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Templates [ Archives / Au secours ] (ymerej)

mardi 19 octobre 2004 à 20:08:34 | Templates

ymerej

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.

-------------------------------------------------------------------------------------
//fichier maillon.h

#ifndef MAILLON_H
#define MAILLON_H

// Classe maillon
template <class T>
class maillon {

private:

T data ;
maillon<T>* suivant ;


public:

// Forme canonique de Coplien
maillon() ;
maillon(const T&);
maillon(const maillon<T>&) ;
~maillon() ;
maillon<T>& operator=(const maillon<T>&) ;

// Accesseurs
T get_data(){return data;}//fonction inline
maillon<T>* get_suivant(){return suivant;}//fonction inline

// Mutateurs
void set_data(T d){data = d;}
void set_suivant(maillon<T>* m){suivant = m;}
};


#endif

-------------------------------------------------------------------------------------
//fichier maillon.cc

#include "maillon.h"
#include <iostream.h>

//constructeur par defaut
template <class T>
maillon<T>::maillon()
{
suivant = NULL;
}

//constructeur pour initialiser la data
template <class T>
maillon<T>::maillon(const T& d)
{
data = d;
suivant = NULL;

}

//constructeur par copie
template <class T>
maillon<T>::maillon(const maillon<T>& m)
{
data = m.data;
suivant = m.suivant;

}

--------------------------------------------------------------------------------------
// fichier liste.h

//liste.h
#ifndef LISTE_H
#define LISTE_H

#include "maillon.h"
#include <iostream.h>

// Classe liste
template <class T>
class liste {

private:

maillon<T> *tete,*courant, *fin ;
int nb;


public:

// Forme canonique de Coplien
liste() ;
liste(const liste<T>&);
~liste(){supprime();}
liste<T>& operator=(const liste<T>&) ;

// Ajout de maillons
liste<T>& operator+ (const T&) ;
liste<T>& operator+ (const maillon<T>&) ;
liste<T>& operator+ (const liste<T>&) ;

// 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

// Entrees-sorties
void affiche () ;
friend ostream& operator<<(ostream&,liste<T>&);

// 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é
};


#endif

--------------------------------------------------------------------------------------
// fichier liste.cc

#include "liste.h"
#include <iostream.h>

/*-------------------------------------------
CONSTRUCTEURS
-------------------------------------------*/

//par defaut
template <class T>
liste<T>::liste()
{
nb = 0;
tete = fin = courant = NULL;
}

//de recopie
template <class T>
liste<T>::liste(const liste<T>& l):tete(NULL),fin(NULL),courant(NULL),nb(l.nb)
{
*this + l;
}

-------------------------------------------------------------------------------------
//fichier client.cc qui teste les 2 classes

#include <stdio.h>
#include <iostream.h>
#include "liste.h"

int main(int argc, char* argv[])
{

cout << "Test TP2" << endl;

maillon<int> m1(8); //on veut des maillons qui contiennent des int
maillon<int> m2(13);
maillon<int> m3(15);
maillon<int> m4(9);
maillon<int> m5(3);
maillon<int> m6(1233);

liste<int> 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);

return 0;

}


mardi 19 octobre 2004 à 20:32:18 | Re : Templates

djl

c'est tout vu, le code template ne peut pas etre compilé séparement, donc mets la définitions des methodes dans le .h

mardi 19 octobre 2004 à 20:33:16 | Re : Templates

leprov

c quoi tes erreurs de link? ca aiderait.
en attendant que tu repondes je regarde ton code

mardi 19 octobre 2004 à 20:34:46 | Re : Templates

leprov

erf ah effectivement.

mardi 19 octobre 2004 à 21:03:05 | Re : Templates

ymerej

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<int>::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<int>::~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<int>::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<int>::~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<int>::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<int>::~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<int>::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<int>::~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<int>::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<int>::~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<int>::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<int>::~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<int>::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<int>::operator+(maillon<int> 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<int>::operator+(maillon<int> 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<int>::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<int>::insere(maillon<int> 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<int>::insere(maillon<int> 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<int>::insere(maillon<int> 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<int>::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<int>::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<int> &)'
c:\documents and settings\jeremy\mes documents\travaux personnels\informatique\gi01\lo43\tp2\templates\client.o(.text+0x371):client.cc: undefined reference to `maillon<int>::~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<int>::~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<int>::~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<int>::~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<int>::~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<int>::~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<int>::supprime(void)'

mardi 19 octobre 2004 à 21:05:10 | Re : Templates

ymerej

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...

mardi 19 octobre 2004 à 21:06:25 | Re : Templates

djl

on avais compris :)

apres ces erreurs de liens sont assez explicites

mardi 19 octobre 2004 à 21:09:03 | Re : Templates

leprov

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...

mardi 19 octobre 2004 à 21:10:31 | Re : Templates

djl

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

mais la premeire solution est la plus commune

mardi 19 octobre 2004 à 21:11:39 | Re : Templates

ymerej

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


1 2 3 4

Cette discussion est classé dans : liste, data, include, const, maillon


Répondre à ce message

Sujets en rapport avec ce message

Format de données [ par leskritiques ] Voici le programme que je veux modofier :#include "chaine.h"#include "entreeSortie.h"#include "chaine.cpp"#include "entreeSortie.cpp"int pgcd (const i Une classe comme donnée membre [ par agbere ] Bonjour à tous Cela fait bien longtemps que je n'ai plus developpé en C++. Aujourd'hui je suis confronté au problème suivant: Code: /***************** créer une liste à partir d'un arbre [ par morganistic ] bonjour a tous!voila deux structures : une liste et un arbre.je n arrive pas a parcourir un arbre en inserant chaque noeud de l arbre dans une liste.. bios.h [ par rakma74 ] Bonjour,je suis a la recherche d'un "bios.h" pour interfacer un port serie...Quelqu'un saurait-il ou je peux le télécharger...merci d'avance.Si je ne erreur de compilation [ par cpp_devlopper ] bonjour,je suis un nouvel utilisateue de Microsoft visual studio, je l'ai essayé avec un programme "point.cpp"mais quand je le compile il ne reconnait aide moi sur ce petit programme [ par salim_samir ] salut a tous j'ai essayé d'executer ce petit programme sur le port// il s'execute mais il ne commande pas les sorties de port qui ce qu'il manque svp: PostgreSQL - SPI - C++ [ par dacor ] Bonjour, je voudrais écrire des procédures stockées en c++ mais je rencontre des pb dans l'inclusion de : executor/executor.h et de executor/spi.h prototype de fonction [ par loupin ] D'abord bonjour a tous. Je debute en c tant bien que mal, mais j'ai un tout petit souci qui n'en ai pas un mais j'aimerais comprendre. Alors voici le pb avec glReadPixels pas de capture [ par breton51 ] bonjourje debute e c++ et j'ai un petit pb pour faire une capture d'ecran j'utilise glReadPixels qui est sencer me retourner le tableau de pixel "data classe avec liste simple [ par Olive512005 ] Bonjour ,je voudrais avant tout remercier pour les réponses que j'ai eu à propos du tableau. voila j'ai un petit problème à résoudre encore, il faud


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.