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 :

Probl�me d'acc�s et classe interne.


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut Probl�me d'acc�s et classe interne.
    Salut!

    Dans cette configuration:
    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
    class A
    {
    	protected:int n;
    	friend class B;	
    };
     
    class B{
    public:A* p_a1;
     
    public:class C{
    	public:A* p_a2;
     
    	public:void f2(){
    		   cout<<p_a2->n<<endl;
    		   }
     
    	};
     
    public:void f1(){
    		   cout<<p_a1->n<<endl;
    	   }
     
    };
    "f2()" ne peut pas acc�der � "A.n" car il est "protected".
    Comment d�clarer "C" en tant que classe "friend" de "A" afin d'y avoir acc�s comme le fait "f1()" car "B" est "friend" de "A"?

    Merci de votre aide.

  2. #2
    Membre chevronn�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Paris (�le de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par d�faut
    Salut,

    Dans ta classe A il suffit de rajouter la ligne suivante :


  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Merci de la r�ponse mais ce n'est pas possible dans cette configuration car "B" n'est pas d�fini et donc l'acc�s � ses membres est impossible; ce que confirme le compilo:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    error C2027: use of undefined type 'B'

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    D�tails du profil
    Informations personnelles :
    �ge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par d�faut
    Et si tu d�clares B avant A, avec simplement une d�claration anticip�e de A avant la d�claration de B (ce qui doit �tre possible puisque tu n'utilises que des pointeurs sur A) ?

    Exemple :
    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
    27
     
    class A;
     
    class B{
    public:A* p_a1;
     
    public:class C{
    	public:A* p_a2;
     
    	public:void f2(){
    		   cout<<p_a2->n<<endl;
    		   }
     
    	};
     
    public:void f1(){
    		   cout<<p_a1->n<<endl;
    	   }
     
    };
     
    class A
    {
    	protected:int n;
    	friend class B;
    	friend class B::C;
    };

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Citation Envoy� par Eusebe
    Et si tu d�clares B avant A, avec simplement une d�claration anticip�e de A avant la d�claration de B (ce qui doit �tre possible puisque tu n'utilises que des pointeurs sur A) ?
    Merci mais:
    -Inverser l'ordre des classes risque de perturber d'autres classes qui les utilisent;
    -"A" est utilis�e :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    cout<<p_a2->n<<endl;
    cout<<p_a1->n<<endl;

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    D�tails du profil
    Informations personnelles :
    �ge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par d�faut
    Citation Envoy� par seriousme
    Merci mais:
    -Inverser l'ordre des classes risque de perturber d'autres classes qui les utilisent;
    Ah bon, comment ? Tu aurais un exemple ?

    Citation Envoy� par seriousme
    -"A" est utilis�e :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    cout<<p_a2->n<<endl;
    cout<<p_a1->n<<endl;
    Ah oui, j'avais pas vu... Mais pour passer outre, il suffit de s�parer d�claration et impl�mentation.
    Si tu veux des fonctions inline, tu peux utiliser le mot cl� "inline". Ce qui donnerait quelque chose du genre :

    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
    27
    28
    29
    30
    class A;
     
    class B{
    public:A* p_a1;
     
    public:class C{
    	public:A* p_a2;
     
    	public:void f2();
     
    	};
     
    public:void f1();
     
    };
     
    class A
    {
    	protected:int n;
    	friend class B;
    	friend class B::C;
    };
     
    inline void B::C::f2(){
    	cout<<p_a2->n<<endl;
    	}
     
    inline void B::f1(){
    	cout<<p_a1->n<<endl;
    	}

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Ca fait un peu fouilli mais �a compile.
    Merci.

  8. #8
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    D�tails du profil
    Informations personnelles :
    �ge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par d�faut
    Citation Envoy� par seriousme
    Ca fait un peu fouilli mais �a compile.
    Merci.
    Et bien en fait si tu s�pares d�claration, impl�mentation et classes, �a fera moins fouilli . Tu te retrouveras juste avec les fichiers cpp et h des classes A et B (soit 4 fichiers).

  9. #9
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Citation Envoy� par Eusebe
    Et bien en fait si tu s�pares d�claration, impl�mentation et classes, �a fera moins fouilli . Tu te retrouveras juste avec les fichiers cpp et h des classes A et B (soit 4 fichiers).
    OK, c'est not�, merci.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me d'acc�s � la classe ZipFile
    Par gilles99 dans le forum Framework .NET
    R�ponses: 5
    Dernier message: 25/04/2014, 15h17
  2. Probl�me avec classLoader et classe interne
    Par croquette06 dans le forum Langage
    R�ponses: 2
    Dernier message: 30/12/2012, 00h01
  3. Probl�me d'acc�s aux m�thodes d'une classe
    Par RR instinct dans le forum Langage
    R�ponses: 5
    Dernier message: 26/06/2006, 14h51
  4. R�ponses: 16
    Dernier message: 07/02/2006, 14h19
  5. [TOMCAT] JSP probl�me d'acc�s aux m�thodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    R�ponses: 3
    Dernier message: 22/05/2004, 14h02

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