C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Comment definir une fonction friend d'une classe privee?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Ghislain Lemaur
Guest





PostPosted: Thu Feb 05, 2004 10:17 am    Post subject: Comment definir une fonction friend d'une classe privee? Reply with quote



Bonjour a tous,

Le code source ci-dessous ne compile pas avec gcc.
Ce que je veux faire est declarer une fonction friend d'une
classe imbriquee et privee. Le probleme se pose lors de la
definition de la fonction amie.
Comment puis-je faire? Faut-il ajouter la fonction en static
dans la classe superieure? (je prefererais eviter ca)

Merci

Ghislain Lemaur

source:

#include <iostream>

class A{
public:
void action();
private:
class B{
friend std::ostream& operator << (std::ostream&, B&);
};
B b;
};

std::ostream& operator << (std::ostream& out, A::B& b){
out << "hello world";
}

void A::action(){
std::cout << b;
}

int main(){
A a;
a.action();
}

erreur de gcc:

private.cpp: In function `std::ostream& operator<<(std::ostream&, A::B&)':
private.cpp:7: error: `class A::B' is private
private.cpp:13: error: within this context




Back to top
Laurent Ricci
Guest





PostPosted: Thu Feb 05, 2004 11:04 am    Post subject: Re: Comment definir une fonction friend d'une classe privee? Reply with quote



Bonjour Ghislain,

Le probleme n'est pas seulement d'autoriser l'access aux donnees privees
de la classe B (ce que fait le friend std::ostream& operator <<
(std::ostream&, B&))
mais d'autoriser l'access a la classe B qui est une definition privee de A.
Tu dois
ajouter un friend std::ostrem... dans la classe A:

class A{
public:
void action();
private:
class B{
friend std::ostream& operator << (std::ostream&, B&);
};
B b;
friend std::ostream& operator << (std::ostream&, B&);
};

Ce qui a le desavantage de rendre l'ensemble de la classe A accessible.

Laurent

"Ghislain Lemaur"
Quote:
Bonjour a tous,

Le code source ci-dessous ne compile pas avec gcc.
Ce que je veux faire est declarer une fonction friend d'une
classe imbriquee et privee. Le probleme se pose lors de la
definition de la fonction amie.
Comment puis-je faire? Faut-il ajouter la fonction en static
dans la classe superieure? (je prefererais eviter ca)

Merci




Back to top
Ghislain Lemaur
Guest





PostPosted: Thu Feb 05, 2004 1:05 pm    Post subject: Re: Comment definir une fonction friend d'une classe privee? Reply with quote



Quote:
Le probleme n'est pas seulement d'autoriser l'access aux donnees privees
de la classe B (ce que fait le friend std::ostream& operator
(std::ostream&, B&))
mais d'autoriser l'access a la classe B qui est une definition privee de
A.
Tu dois
ajouter un friend std::ostrem... dans la classe A:

class A{
public:
void action();
private:
class B{
friend std::ostream& operator << (std::ostream&, B&);
};
B b;
friend std::ostream& operator << (std::ostream&, B&);
};

Ce qui a le desavantage de rendre l'ensemble de la classe A accessible.

Merci pour la solution. Mais je ne souhaite pas rendre visible

toute la classe A. Le mieux alors c'est peut-etre de rendre la definition
de B publique. Y a-t-il une autre solution?

Ghislain




Back to top
Laurent Ricci
Guest





PostPosted: Thu Feb 05, 2004 1:29 pm    Post subject: Re: Comment definir une fonction friend d'une classe privee? Reply with quote


"Ghislain Lemaur" <ghislain.dot.lemaur.AT (AT) crmm (DOT) umh.ac.be> wrote

Quote:
Ce qui a le desavantage de rendre l'ensemble de la classe A accessible.

Merci pour la solution. Mais je ne souhaite pas rendre visible
toute la classe A. Le mieux alors c'est peut-etre de rendre la definition
de B publique. Y a-t-il une autre solution?

Ghislain

Effectivement la meilleure solution est de rendre la definition de B

publique dans la classe A tout en conservant le membre b privé.

Laurent




Back to top
Frederic Py
Guest





PostPosted: Tue Feb 24, 2004 6:01 pm    Post subject: Re: Comment definir une fonction friend d'une classe privee? Reply with quote

Laurent Ricci wrote:
Quote:
"Ghislain Lemaur" <ghislain.dot.lemaur.AT (AT) crmm (DOT) umh.ac.be> wrote in message
news:bvtf4t$gns$1 (AT) naxos (DOT) belnet.be...

Ce qui a le desavantage de rendre l'ensemble de la classe A accessible.


Merci pour la solution. Mais je ne souhaite pas rendre visible
toute la classe A. Le mieux alors c'est peut-etre de rendre la definition
de B publique. Y a-t-il une autre solution?

Ghislain


Effectivement la meilleure solution est de rendre la definition de B
publique dans la classe A tout en conservant le membre b privé.

Laurent


Ou de faire un truc de ce genre :

class A_alpha {
protected:
class B {
friend std::ostream &operator <<(std::ostream &, B &);
};
friend std::ostream &operator <<(std::ostream &, B &);
};

class A: public A_alpha {
public:
void action();

private:
B b;
};

Ainsi le probleme d'accés a A est réglé ;)

--
Frédéric Py

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.