IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Problème de template ...


Sujet :

Langage C++

  1. #1
    Membre confirmé Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut Problème de template ...
    Bonjour,

    voilà je commence à apprendre le systeme des templates..

    voici tout d'abord le code qui me pose problème :
    (soyez indulgents je suis débutante ^^)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<vector>
     
    using namespace std;
     
     
    //****************
    //CLASSE LISTE
    //****************
     
    template<typename T>
    class Liste {
     
    typedef struct ListeItem
    {
    vector<T>item; 
    }ListeItem;
               //série d'objet dynamique de la classe Liste
     
    ListeItem *chose;
     
     
          public:
     
                 Liste();
                 ~Liste();
     
                 void Add(); // ajouter un élément à une position donnée
                 void Remove(); //supprime un élément à une position donnée
                 void affiche(); //pour pouvoir lire les données
    };
     
     
    //*************
    //Constructeur
    //*************
    template<typename T>
    Liste<T>::Liste(){
     
    chose = NULL;
    return;   
    }
     
     
    //**********
    //Destructeur
    //**********
    template<typename T>
    Liste<T>::~Liste(){
     
    return;
    }
     
     
     
     
    //**********
    //Fonction add
    //**********
     
    template<typename T>
    void Liste<T>::Add(){
     
    T elem;
    size_t pos;
     
    cout<<"Fonction ADD: Permet d'ajouter un élément à un position donnee***"<<endl;
    cout<<"*****************************************************************"<<endl;
    cout<<endl;
     
    affiche();
     
    cout<<"Vous pouvez grace a cette fonction ajouter un element a la position que vous désirez."<<endl;
    cout<<"Quel est l'element que vous desirez ajouter ?"<<endl;
    cin>>elem;
    cout<<endl;
     
     
    cout<<"Notre liste d'element est de taille: "<<ListeItem::item.size();
    cout<<endl;
     
     
    cout<<"A quelle position souhaitez vous inserer cet element?"<<endl;
    cin>>pos;
     
    cout<<"Positionnement en cours ..."<<endl;
    cout<<endl;
     
    for (size_t i = 0, size = ListeItem::item.size(); i<size; ++i ){
    if(size==pos){
    ListeItem::item.size[i]=elem;
    }
    }
     
    cout<<"***FIN***"<<endl;
    cout<<endl;
    }
     
     
    //****************
    //fonction remove
    //***************
     
    template<typename T>
    void Liste<T>::Remove(){
     
    T elem;
     
    cout<<"Fonction REMOVE: Permet de supprimer un element à un position donnee***"<<endl;
    cout<<"*****************************************************************"<<endl;
    cout<<endl;
     
    affiche();
     
    cout<<"Vous pouvez grace a cette fonction supprimer un element a la position que vous desirez."<<endl;
    cout<<"Quel est l'element que vous desirez supprimer ?"<<endl;
    cin>>elem;
    cout<<endl;
     
     
    cout<<"Notre liste d'element est de taille: "<<ListeItem::item.size();
    cout<<endl;
     
     
    cout<<"Supression ... ..."<<endl;
    cout<<endl;
     
    for (size_t i = 0, size = ListeItem::item.size(); i<size; ++i ){
    if(ListeItem::item[i]==elem){
     
    ListeItem::item[i].remove(); //on efface la donnée
     
    }
    }
     
    cout<<"***FIN***"<<endl;
    cout<<endl;
    }
     
     
    //***************
    //fonction affiche
    //****************
     
    template<typename T>
    void Liste<T>::affiche(){
     
    cout<<"Voici notre série d'élément dynamique"<<endl;
    cout<<endl;
     
    for (size_t i = 0, size = ListeItem::item.size(); i<size; ++i ){
    cout<<ListeItem::item[i]<<endl; //affiche les éléments de type T
    }
     
    }
     
     
    //*********************
    //TEST DE LA CLASSE
    //Exemple d'execution
    //*********************
     
    int main(void){
     
    cout<<"EXEMPLE DE PROGRAMME POUR TEST DE FONCTIONNEMENT DE LA CLASSE LISTE"<<endl;
    cout<<"###################################################################"<<endl;
    cout<<endl;
    cout<<endl;
     
    Liste<int>I;
     
     
    I.affiche();
    I.Add();
    I.affiche();
     
    getchar();
    }
    Bon. C'est ma première manipulation de template et j'avoue que "PFFFFIOU" j'ai du mal ..

    Mon probleme est dans le main, a cet endroit :

    I.affiche();
    (bon après aussi.. mais c'est le meme type d'erreur ..)

    et voila ce que me met DEVC++ :

    In member function `void Liste<T>::affiche() [with T = int]':
    instantiated from here
    object missing in reference to `Liste<int>::ListeItem::item'
    from this location
    Je ne comprend pas vraiment cette erreur a vrai dire, quelqu'un pourrait il me mettre sur la voie de la correction ?

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    bonjour.
    Citation Envoyé par mouchT8 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct ListeItem
    {
    vector<T>item; 
    }ListeItem;
    ... Bizarre ça, pourquoi ne pas simplement mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct ListeItem
    {
    vector<T>item; 
    };
    ?
    Surtout que ça risque de créer de ces conflicts de noms...



    Dans la fonction remove:
    Citation Envoyé par mouchT8 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (size_t i = 0, size = ListeItem::item.size(); i<size; ++i ){
    if(size==pos){
    ListeItem::item.size[i]=elem;
    }
    }
    là, il y a un gros problème, tu confond l'objet et le type. ici, ListeItem est normalement un type (quoique qu'avec ton typedef bizarre, ce soit pas sûr). Donc la fonction size n'a rien a revoyer. il faudrais écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (size_t i = 0, size = chose->item.size(); i<size; ++i ){
    if(size==pos){
    chose->item.size[i]=elem;
    }
    }
    Dans la fonction affiche
    Citation Envoyé par mouchT8 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (size_t i = 0, size = ListeItem::item.size(); i<size; ++i ){
    cout<<ListeItem::item[i]<<endl; //affiche les éléments de type T
    }
    même topo.
    Remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (size_t i = 0, size = chose->item.size(); i<size; ++i ){
    cout<<chose->item[i]<<endl; //affiche les éléments de type T
    }

    voilà.

    bonne chance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] Problème de template
    Par T0xF0x dans le forum Langage
    Réponses: 4
    Dernier message: 05/07/2006, 13h36
  2. [xslt][Javascript] Problème de templates
    Par Dnallabar dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/11/2005, 11h55
  3. problème classes templates...
    Par youp_db dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2005, 13h04
  4. Réponses: 3
    Dernier message: 22/03/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo