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 amies


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut fonctions amies
    Bonjour,

    J'ai un problème en ce qui concerne les fonctions amies.

    Je définie une fonction amie dans une classe de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    friend void compar (vector<adherent> &);
    et ma fonction est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void compar(vector<adherent> &A)
    {
       cout<<A[0].nom;
    }
    nom est défini en private de ma classe adherent.

    Le compilateur m'affiche le message suivant :
    'compar' is neither function nor number function; cannot be declared friend.

    Mais je ne sais pas pourquoi.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    ça fonctionne très bien chez moi !

    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 <string>
    #include <vector>
     
     
    class Adherant
    {
    public:
    	Adherant(std::string nom) {this->nom = nom;}
    	virtual ~Adherant(){}
     
    private :
    	std::string nom;
     
    	friend void compar(std::vector<Adherant>&);
    };
     
    void compar(std::vector<Adherant>& A)
    {
    	if(!A.empty())
    	{
    		std::cout << A[0].nom.c_str();
    	}
    }

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    t'as pas un problème d'include ou un truc dans le genre ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    est-il nécessaire de mettre les std:: partout?

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    non.

    tu peux faire :

    using namespace std;

    mais en général, à ne placer qu'en haut des fichiers cpp !
    si on met ça dans les h, ça revient à désactiver les namespaces, faut juste le savoir...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    ok, merci.

    De plus ça compile, mais juste après ça ne compilait plus.
    Maintenant ca recompile.

    Donc, maintenant est ce que mon compilateur fonctionne correctement?

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    A priori, je dirais oui : en général, ils sont bien rodés !

    Tu tournes sous quoi ?
    Je me rappelle qu'une version de visual studio 6 posait problème avec les fonctions amies... si tu tournes sous visual 6, installes le Service Pack 5.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    J'utilise Dev-C++ 4.9.9.2, donc çà peut venir de là, car je connais d'autres personnes qui ont des problèmes avec.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    OK !

    Pour info, je tourne sous eclipse avec le plugin cdt, si tu cherches quelque chose de gratuit...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Ah ouais, je vais peut etre essayé dans ce cas

  11. #11
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Si tu connais très bien le contexte du programme tu peux utiliser une clause using tel

    ou plus précis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    using std::vector
    using std::cout
    using std::string
    Si tu connais plus ou moins le contexte il est recommandé de mettre les std:: à chaque apparition, afin d'éviter les conflits.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/03/2008, 16h57
  2. fonctions amies C++
    Par hamma2 dans le forum C++
    Réponses: 2
    Dernier message: 27/11/2007, 14h15
  3. Fonction ami + template
    Par zenux dans le forum Langage
    Réponses: 8
    Dernier message: 08/12/2006, 15h59
  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