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

C++ Discussion :

Fonctions génériques et listes


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 47
    Points
    47
    Par défaut [Résolu] Fonctions génériques et listes
    Salut, j'ai fait une fonction générique qui permet d'afficher une liste d'éléments de type T, le problème est que mon compilateur me donne l'erreur suivante:

    [Linker error] undefined reference to `void afficheListe<int>(std::list<int, std::allocator<int> > const&)'

    voici le code source de mon prog

    main.cpp

    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
    #include <iostream>
    using std::cout;
     
    #include <list>
    using std::list;
     
    template <typename T> void afficheListe (const list<T>& li);
     
    int main()
     
    {
     
        list<int> li;
        list<int>::iterator q;
     
        q = li.begin();
        q = li.insert(q, 4);
        q = li.insert(q, 2);
        q = li.insert(q, 9);
        q = li.insert(q, 1);
     
        afficheListe(li);
     
    }
    fonc.cpp

    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
    #include<list>
    using std::list;
     
    #include<iostream>
    using std::cout;
     
    template <typename T>
    void afficheListe (const list<T>& li)
     
    {
         typename list<T>::const_iterator p;
     
         for (p = li.begin(); p != li.end(); p++)
         {
             cout << "[";
             cout << *p;
             cout << "] ";
         }
    }
    Compilateur: devc++ (ça ne marche pas non plus avec Visual C++)

    :

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Il faut que la definition du template soit visible ou il y a des instanciations.

    En fait, ce n'est pas tout a fait vrai mais j'ai pas le temps d'ecrire plus. Pour plus d'info, faire une recherche dans google.groups "export template" pour l'auteur bourguet dans fr.comp.lang.c++.
    Voir aussi http://www.bourguet.org/cpp/export.pdf
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 47
    Points
    47
    Par défaut
    Je suis pas sûr d'avoir compris...

    si je le place a l'intérieur du main ça me retourne une erreur...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 47
    Points
    47
    Par défaut
    j'ai pas de fichier .h...

    concrètement je dois modifier quoi dans mon code ?

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En gros, renomme fonc.cpp en fonc.h... et inclue celui-ci dans main.cpp.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 47
    Points
    47
    Par défaut
    Merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/10/2009, 11h45
  2. Recherche fonction sur les listes
    Par becks dans le forum Général Python
    Réponses: 5
    Dernier message: 05/05/2006, 16h11
  3. choisir un fichier .js à éxécuter en fonction d'une liste
    Par bikerman dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 10/04/2006, 14h48
  4. Comment rappeler une fonction dans une liste déroulante
    Par strogos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/05/2005, 23h54
  5. Equivalent de la fonction d'agregat LIST ?
    Par rahan15 dans le forum SQL
    Réponses: 5
    Dernier message: 10/12/2004, 22h21

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