Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3242 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] friend ca veut dire ami en anglais non ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] friend ca veut dire ami en anglais non ?

n°40158
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:32:24  profilanswer
 

voici un extrait de classe toute bete :  
 

Code :
  1. class Cell
  2. {
  3.   ...
  4. public:
  5.   friend ifstream & operator >> (ifstream& in, Cell& c);
  6.   friend ofstream & operator << (ofstream& in, const Cell& c);
  7. };


 
... plus loin dans mon cpp j'ai ca :
 

Code :
  1. ifstream& operator >> (ifstream& in, Cell& c)
  2. {
  3.   ...
  4. }
  5. ofstream& operator << (ofstream& out, const Cell& c)
  6. {
  7.   ...
  8. }


 
 
et a la compilation j'ai ca : :sarcastic:
 

Code :
  1. D:\Microsoft Visual Studio\MyProjects\TECC\Source\streams.cpp(233) : error C2248: 'imax' : cannot access private member declared in class 'Cell'


 
 
C'est quoi le bleme ? A noter que ca me le fait avec Visual C++, mais pas avec g++... Je vais quand meme pas tout declarer en public pour lui faire plaisir :sweat:

 

[edit]--Message édité par tgrx--[/edit]

mood
Publicité
Posté le 15-06-2001 à 16:32:24  profilanswer
 

n°40164
BENB
100% Lux.
Posté le 15-06-2001 à 16:40:23  profilanswer
 

Je ne vois pas !
 
regarde avant les declarations de prototypes de ces fontions s'il ne manque rien comme une parenthese/accolade non fermee...

n°40166
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:42:39  profilanswer
 

BENB > le probleme c'est que visual accepte tres bien les operateurs << et >> pour des membres publics, mais pas pour des membres prives...
 
Faut-il que je declare les operateurs en private ?? Je vais essayer.

n°40168
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:44:26  profilanswer
 

ben non ca change rien :eek:
 
Les visualiens, vous avez deja du etre confrontes a ce genre de probleme...

n°40169
BENB
100% Lux.
Posté le 15-06-2001 à 16:45:48  profilanswer
 

tgrx a écrit a écrit :

BENB > le probleme c'est que visual accepte tres bien les operateurs << et >> pour des membres publics, mais pas pour des membres prives...
 
Faut-il que je declare les operateurs en private ?? Je vais essayer.




 
Oui, mais pour les publics ces methodes n'ont pas besoin d'etre friend...
la position de la declaration friend n'a aucune importance d'apres le Stroustrup, maintenant, en visual peut-etre...
mais je ne vois pas l'interet d'un friends pour ne voir que les publics ?
As-tu essaye de les mettre protected ?

n°40170
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:48:30  profilanswer
 

J'ai essaye private, protected, public, rien a faire, visual s'en fout royalement...

n°40180
minusplus
Posté le 15-06-2001 à 17:05:20  profilanswer
 

gcc compile ça :
 
#include <iostream>
 
class truc{
  private:
    int machin;
  public:
    truc() : machin(0){};
  friend ostream& operator<<(ostream& os, truc& t);
     
};
 
ostream& operator<<(ostream& ost, truc& t){  
  int bidule;
  bidule  = t.machin;
  ost << bidule << endl;
}
 
int main(){};
 
 
 
 
t'es sur que t'as pas oublié un & ou une connerie comme ça qqpart passke si c'est le cas, le compilo ne reconnait pas l'opérateur comme friend et t'envoie bouler. (c'est ce qui m'est arrivé ! :D )

n°40183
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 17:09:26  profilanswer
 

gcc compile aussi mon programme, c'est Visual qui veut pas.
Et puis regarde mon post, j'ai fait un copier coller de mon source... et ca passe pas... :sarcastic:

n°40184
minusplus
Posté le 15-06-2001 à 17:13:23  profilanswer
 

et ben VC++ c'est caca !

n°40187
BENB
100% Lux.
Posté le 15-06-2001 à 17:16:58  profilanswer
 

Reponse idiote ? tu as essaye sans les espaces entre Xstream et &
et entre operator et << ou >>?
 
je sais c'est idiot, mais bon...

mood
Publicité
Posté le 15-06-2001 à 17:16:58  profilanswer
 

n°40189
minusplus
Posté le 15-06-2001 à 17:19:17  profilanswer
 

:lol:

n°40190
janoscoder
Posté le 15-06-2001 à 17:19:53  profilanswer
 

janoscoder is a lifesaver!
fait un ctrl-c ctrl-v des prototypes des deux fonction pour les mettre avant la définition de la classe.
msvc (et c'est la norme, je pense) ne veut accepter de déclaration friend que de trucs dont on a déjà déclaré l'existance.
 
 
dont
fonc
class truc
{
 
friend fonc
};
 
fonc
{
 
}

n°40194
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 17:33:37  profilanswer
 

ah oui mais ca craint :
 
alors il faudrait faire :
 

Code :
  1. class A;
  2. ostream& operator << (ostream& o, const A& a);
  3. class A
  4. {
  5. public:
  6.   friend ostream& operator << (ostream& o, const A& a);
  7. };


 
Je n'aurai qu'une chose a dire : merci Microsoft... :sarcastic:

 

[edit]--Message édité par tgrx--[/edit]

n°40201
janoscoder
Posté le 15-06-2001 à 18:00:45  profilanswer
 

ça craint, c'est pas pratique, mais c'est cohérent car le truc friend peut exister disons dans deux classes
genre
 
 
class A
{
 friend int func(Aà dat);
 int gettype(){return 0;}
};
 
class B: public A
{
 friend int func(A & dat)
 int getttype(){return 1;}
};
 
class C: public A
{
 friend int func(A & dat);
 int gettype(){return 2;}
};
 
voif func(A& dat)
{
 switch(datgettype())
 ...
 traitement en fc du type
}
 
l'exemple est bidon, mais on voit le prob.
Soit on accepte que la ligne
friend void func()...
soit une déclaration de fonction
et dans ce cas y'a trois déclarations (identiques, soit),
soit on ne considère pas que c'est une déclaration (cf bjarne), et donc la fonction n'est pas déclarée.
donc la ligne avec friend devrait renvoyer l'erreur: connait pas cette fonction moi. (ms a le bon goût de ne pas renvoyer l'erreur et de se plaindre plus tard)
 
Un déclaration antérieure est donc nécessaire.
 
gcc, lui, accepte bien des friends, mais ne les considère pas comme déclaration. Si la fonction n'est pas connue, il ne se plaint pas (c'est l'ennui de cette façon de voir les choses).
Donc quand la fonction est définie plus tard, il regarde si son prototype appartient à la liste des amis de la classe et se comporte en conséquence.
 
Pour une fois que ms sacrifie l'idéalisme au pragmatisme...
 
A+
 
j'avoue, ce bug m'a bien fait chier des bulles en janvier.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] friend ca veut dire ami en anglais non ?

 

Sujets relatifs
Est-il possible de programmer un monde où on faire ce tt ce qu'on veutSites web de forums en CGI et en anglais
JAVA comment faire dire Bonjours ''le_nom_du_gas'' dans un mailFaire dire Bonjours "le_nom_du_gas" en HTML
[PHP] Pb avec file_exists() !?!? pkoi personne veut voir mon post ???pourquoi chez.com veut pas de mon script PHP
[Geometrie] Qui pourra me dire...pas résumable, on va dire, juste : C/C++
[OPENGL] pourquoi ca veut pas marcher chez moi?[SQL] => Elle me soûle cette requête qui veut pô marcher !!!!!!
Plus de sujets relatifs à : [C++] friend ca veut dire ami en anglais non ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR