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 :

Fonction ami + template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut Fonction ami + template
    Bonjour,

    Comment faut-il faire pour déclarer une fonction ami template ?
    J'ai esseyé ceci mais ça ne compile pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template<class T> class A
    {
    	public:
    		template<class T> friend void fct(T);
    };
     
    template<class T> void fct(T t)
    {
     
    }
    Merci...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    sous VC++ 2005 j'ai pas de problème avec ton code ...
    par contre sous VC6, la déclaration d'amitié ne marche pas

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Vc6 ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    Le code test compile mais je comprends pas le sens
    d'une fonction ami sans une reference ou poiteur sur A passé en parametre.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    ben peut etrye que dans sa fonction, il instancie une classe A<t> objA; et qu'il veut pouvoir accéder aux éléments privées de objA ...

    Je sais pas, il faudrait peut être un peu pls de code ...

    Mais sinon, on peut toujours faire un emplatre sur une jambe de bois pour VC6 :
    passer par une classe B amie de A, qui comporte une fonction membre statique template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class B
    {
      template<class T> static void fct(T z) {};
    };
    et utiliser B::fct<T> au lieu de fct<T>

    ou alors utiliser une classe template B amie de A, avec une fonction membre statique, et utiliser B<T>::fct(T)

    J'espère ne pas m'être trop avancé ...
    A tester.

    @+

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut
    Merci pour vos réponses.

    Voila si ça peut faire plaisir à certain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template<class T> class A
    {
    	public:
    		template<class T> friend void fct(const A<T> &);
    };
     
    template<class T> void fct(const A<T> &a)
    {
     
    }
    Mais j'ai toujours les mêmes erreurs avec g++ :
    test.cpp:7: error: declaration of `class T'
    test.cpp:4: error: shadows template parm `class T'

    NB : ligne 4 = template<class T> class A
    ligne 7 = template<class T> friend void fct(A<T> &);

    Si personne ne sais pourquoi ça ne compile pas, je ferait une classe amis...mais j'aimerais quand bien savoir pourquoi ça ne compile pas, grrr.

Discussions similaires

  1. Template et fonction amie / type de retour inconnu
    Par Armas dans le forum Débuter
    Réponses: 13
    Dernier message: 24/04/2013, 15h17
  2. Réponses: 32
    Dernier message: 28/11/2010, 17h33
  3. class template et fonction amie
    Par sleepless dans le forum C++
    Réponses: 5
    Dernier message: 19/11/2010, 13h37
  4. fonctions amies
    Par hamma2 dans le forum C++
    Réponses: 4
    Dernier message: 10/12/2005, 20h19
  5. [C++] Fonction amie vituelle dans une classe ?
    Par Bob.Killer dans le forum C++
    Réponses: 11
    Dernier message: 04/12/2005, 13h42

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