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 :

template et operator <<


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut template et operator <<
    Salut j'ai creer un patron de classe 'big' et j'ai essayé de surcharger l'operateur << mais ça plante bizarrement au linkage
    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
    template <typename U,typename I>
    class big
    {
    U type1;
        I type2;
        public:
     
     
        big()
        {
        }
        ~big(){}
        friend ostream operator << (ostream &o, big<U,I>&);
    };
    template <typename U,typename I>
    ostream operator << (ostream &o, const big<U,I>& bb)
    {
        o<<bb.type1<<bb.type2;
        return o;
    }
    erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    main.cpp|99|warning: friend declaration `std::ostream operator<<(std::ostream&, big<U, I>&)' declares a non-template function|
     
    main.cpp|99|warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning|
     
    .objs\main.o:main.cpp:(.text+0x1f2)||undefined reference to `operator<<(std::ostream&, big<int, int>&)'|

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    test ça

    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
    template <typename U,typename I>
    class big
    {
    private:
     
    U type1;
        I type2;
     
    public: 
     
        big()
        {
        }
     
        ~big(){}
     
    	template <typename S,typename T> // ICI le changement
        friend ostream& operator<<(ostream &o,const big<S,T>& b);
    };
     
    template <typename U,typename I>
    ostream& operator << (ostream &o, const big<U,I>& bb)
    {
        o<<bb.type1<< " " << bb.type2;
        return o;
    }

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    eh ben ça fonctionne !il fallait juste ajouter un template <..>. Tu peux m'expliquer pourquoi ça a coincé au debut ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La vraie bonne solution étant

    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
    template <typename U,typename I>
    class big
    {
    U type1;
        I type2;
        public:
     
     
        big()
        {
        }
        ~big(){}
        friend ostream operator << <> (ostream &o, big<U,I>&);
    };
    template <typename U,typename I>
    ostream operator << (ostream &o, const big<U,I>& bb)
    {
        o<<bb.type1<<bb.type2;
        return o;
    }
    La solution donné précédemment rend ta classe amie avec toutes les instances de ton template, ce qui n'est pas ce que tu veux.

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    <> ?

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145

Discussions similaires

  1. template et operator[] ?
    Par rv2931 dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2012, 16h35
  2. operator() avec les templates
    Par kranagard dans le forum Langage
    Réponses: 6
    Dernier message: 09/02/2011, 15h45
  3. [Débutant]Foncteur et operator() template
    Par Sub dans le forum Langage
    Réponses: 14
    Dernier message: 27/03/2007, 13h51
  4. template et operator +
    Par Fry dans le forum Langage
    Réponses: 15
    Dernier message: 26/06/2006, 20h31
  5. Templates et Operator()
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 14/01/2006, 13h41

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