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 :

Classes amies et namespace


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 223
    Par défaut Classes amies et namespace
    Bonjour,

    J'ai un problème que je n'arrive pas à résoudre quand je mixe classe amie et namespace:

    Plutôt qu'un long discours, voilà un petit code qui illustre le problème:

    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
    class B;
     
    namespace N{
    class A{
    	friend class B;
    private:
    	int m_i;
    };
    };
     
     
    class B {
    public:
    	void f();
    };
     
    void B::f() {
    	N::A obj;
    	int k = obj.m_i;
     
    }
    Le problème est que ça ne compile pas, en mettant comme message d'erreur "error: 'int N::A::m_i' is private"

    alors que si je fait une classe amie c'est justement pour accéder aux membres privés!

    En revanche si j'enlève le namespace, ça passe sans problème.

    Bref, quelqu'un comprendrait-il où est le problème et comment le résoudre?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Les classes friend sont réputées dans le même espace de nommage.
    Ici, c'est N::B qui est friend (même si cette classe n'existe pas).

    Pour traiter ce cas il faut écrire

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 223
    Par défaut
    Merci pour cette réponse.

    En fait j'y avais pensé mais je pensais que d'avoir déclaré B d'abord une première fois en dehors du namespace N suffirait.

    La solution fonctionne sur mon petit exemple, merci beaucoup.
    Reste à voir si ça fonctionne dans mon programme.

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

Discussions similaires

  1. [Héritage] Déclaration d'une classe amie
    Par nihlstroem dans le forum Delphi
    Réponses: 3
    Dernier message: 11/08/2006, 16h57
  2. Template et classe "amie" ?
    Par tintin72 dans le forum Langage
    Réponses: 21
    Dernier message: 11/07/2006, 22h50
  3. Mimer les classes amies en Delphi
    Par cedricgirard dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/10/2005, 19h34
  4. [debutant] Les classes amies
    Par kiroukou dans le forum Débuter
    Réponses: 14
    Dernier message: 04/02/2005, 13h50
  5. Les classes amies en Delphi
    Par Bruno75 dans le forum Langage
    Réponses: 3
    Dernier message: 02/09/2003, 19h34

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