| |||||
| Dernière réponse | |
|---|---|
| Sujet : [C++] friend ca veut dire ami en anglais non ? | |
| janoscoder | ç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. |
| Vue Rapide de la discussion |
|---|