begin process at 2012 05 29 07:02:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

incompatibilité 'std' et 'friend'


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

incompatibilité 'std' et 'friend'

samedi 29 mars 2003 à 14:57:15 | incompatibilité 'std' et 'friend'

cabieces

CABECOU


J'ai définit une fonction amie, celle ci doit donc pouvoir accéder aux champs
privée de la classe. Ceci marche trés bien sauf quand la classe utilise la
bibliotheque standard. Des que j'écris "using namespace std" pour utiliser la
bibliotheque standard alors le compilateur ne veut plus accéder aux champs
privées, ni protégées ne la classe .

--> exemple :

//essai.h
#include <iostream.h>
#include <string>

using namespace std ;

class essai {

friend ::ostream& operator<<( ::ostream & , const essai & );

public :

essai( int para1=0 , int para2=0 , const char * para3 = "caca" )
:A(para1) , B(para2) , ch(para3) {} ;

//.....


private : //ou protected --> le problème est le même

int A ,
B ;
string ch ;
};

//essai.cpp
#include "essai.h"

::ostream & operator<<( ::ostream & os , const essai & E )
{
os << E.A << E.B << E.ch.c_str() ;

return os ;
}

--> compilateur : 'A' : cannot access private member declared in class 'essai' ===> ainsi que pour B et ch

//test_essai.cpp
#include "essai.h"

int main ( void )
{

essai E ;

cout<<E ;

return (0);

}

--> le compilateur m'écrit

...merci de me répondre, c assez pressant
samedi 29 mars 2003 à 15:34:03 | Re : incompatibilité 'std' et 'friend'

vieuxLion

bonjour

si c'est pressé....
je pense que tu compile avec VisualC++6, il est connu pour mal se comporter dans ce cas là.
Ne pas mélanger les includes avec et sans .h !
transforme ton <iostream.h> en <iostream>
ou alors, s'il est possible de te priver de la classe string, inclure le string.h à la place du string

pas de problème avec le code suivant :
//essai.h
#include <iostream>
#include <string>
class essai {
friend std::ostream& operator<<( std::ostream & , const essai & );
public :
essai( int para1=0 , int para2=0 , const char * para3 = "caca" )
:A(para1) , B(para2) , ch(para3) {} ;
private :
int A , B ;
std::string ch ;
};

//essai.cpp
//#include "essai.h"

std::ostream & operator<<( std::ostream & os , const essai & E )
{
os << E.A << E.B << E.ch.c_str() ;
return os ;
}

//test_essai.cpp
//#include "essai.h"
int main ( void )
{
essai E ;
std::cout << E ;
return (0);
}




-------------------------------
Réponse au message :
-------------------------------

> CABECOU
>
>
> J'ai définit une fonction amie, celle ci doit donc pouvoir accéder aux champs
> privée de la classe. Ceci marche trés bien sauf quand la classe utilise la
> bibliotheque standard. Des que j'écris "using namespace std" pour utiliser la
> bibliotheque standard alors le compilateur ne veut plus accéder aux champs
> privées, ni protégées ne la classe .
>
> --> exemple :
>
> //essai.h
> #include <iostream.h>
> #include <string>
>
> using namespace std ;
>
> class essai {
>
> friend ::ostream& operator<<( ::ostream & , const essai & );
>
> public :
>
> essai( int para1=0 , int para2=0 , const char * para3 = "caca" )
> :A(para1) , B(para2) , ch(para3) {} ;
>
> //.....
>
>
> private : //ou protected --> le problème est le même
>
> int A ,
> B ;
> string ch ;
> };
>
> //essai.cpp
> #include "essai.h"
>
> ::ostream & operator<<( ::ostream & os , const essai & E )
> {
> os << E.A << E.B << E.ch.c_str() ;
>
> return os ;
> }
>
> --> compilateur : 'A' : cannot access private member declared in class 'essai' ===> ainsi que pour B et ch
>
> //test_essai.cpp
> #include "essai.h"
>
> int main ( void )
> {
>
> essai E ;
>
> cout<<E ;
>
> return (0);
>
> }
>
> --> le compilateur m'écrit
>
> ...merci de me répondre, c assez pressant
>


Cette discussion est classée dans : include, classe, essai, std, friend


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec certains #include ... [ par yudi ] Hello !Voila, cela fait plusieurs sources (récupérées sur le site) ke j'essaye de compiler sans succes, visiblement car la bibliotheque alakelle fait Vector et classe abstraite [ par titpeste ] Bonjour,dans le cadre d'un projet C++ pour mon ecole, je dois implémenter un vector contenant des objets "abstraits".En fait, j'ai une classe Contrain Utilisation de std::map avec le type void * [ par toast3r ] Bonjour, J'utilise un tableau associatif, map et j'ai un problème au niveau de la récuperation des valeurs, voici le code que j'ai actuellement : # convertisseur euro-yen-dollar [ par AndromedaNoBakura ] bonjour,j'essaye de faire un convertisseur de monnaies en C++ (visualC++6.0) mais il semble y avoir un probleme de definition de ma classe mere.j'ai u Probleme EDL (VC++7) [ par vecchio56 ] Bonjour J'ai deux problèmes d'edition de liens: Dialog.obj : error LNK2001: symbole externe non résolu "public: void __thiscall std::_String_base::_X Agregation bidirectionnelle [ par 0xYg3n3 ] Voila j'aurais voulu savori si quelqu'un sait faire une agregation bidirectionnelle en fait le soucis c'est au niveau des includes /***************cla Fuite de mémoire avec std::list [ par vecchio56 ] Bonjour, J'ai un pb de fuite avec std::list, sous VC++ 7.1 J'ai ce problème seulement quand mon objet est global, ou bien local dans main Voila un cod Trier une std::map [ par simtiers ] Salut ! voilà, j'ai une classe CPlayer avec une surcharge de l'operateur bool CPlayer::operator {     if( posY getPosY() ) comment distinguer entre fichier et repértoire! [ par almousafer ] salut tlm Je viens d'ecrire une fonction qui parcours le répertoire passé en argument et liste son contenu (merci à Fred), mais il reste encore un pb, Opérateur de comparaison dans une classe générique [ par benjiiim94 ] Bonjour, Je crois que pas mal d'infos sont dans le titre, il ne manque plus que la source de la classe : #pragma once #include "StdAfx.h" using n


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales