 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Ghislain Lemaur Guest
|
Posted: Thu Feb 05, 2004 10:17 am Post subject: Comment definir une fonction friend d'une classe privee? |
|
|
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
|
Posted: Thu Feb 05, 2004 11:04 am Post subject: Re: Comment definir une fonction friend d'une classe privee? |
|
|
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
|
Posted: Thu Feb 05, 2004 1:05 pm Post subject: Re: Comment definir une fonction friend d'une classe privee? |
|
|
| 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
|
Posted: Thu Feb 05, 2004 1:29 pm Post subject: Re: Comment definir une fonction friend d'une classe privee? |
|
|
"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
|
Posted: Tue Feb 24, 2004 6:01 pm Post subject: Re: Comment definir une fonction friend d'une classe privee? |
|
|
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 |
|
 |
|
|
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
|
|