fonction friend pas "friend" du tout!

Le
notlucky Hors ligne
Bonjour, je serai bref:
dans le fichier .h
class Annuaire
{
public:
// je vous épargne les autres fonctions
friend std::ostream& operator <<(std::ostream& os, const Annuaire& unAnnuaire);

private:
std::string m_ville;
//je vous épargne les autres attributs car ils ont le même problème
};

dans le fichier .cpp
std::ostream& operator <<(std::ostream& os, const Annuaire& unAnnuaire)
{
os << unAnnuaire.m_ville;
}

erreur de compilation: m_ville is private!

Vraiment là je sais pas quoi penser. Une fonction friend ne devrait-elle pas avoir accès aux attributs de ma classe?
mon include .h est mis et tout compile sauf ça.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
pix laposte pop
Le #24032251
notlucky wrote:

Bonjour, je serai bref:
dans le fichier .h
class Annuaire
{
public:
...// je vous épargne les autres fonctions
friend std::ostream& operator <<(std::ostream& os, const Annuaire&
unAnnuaire);

private:
std::string m_ville;
...//je vous épargne les autres attributs car ils ont le même problème
};

dans le fichier .cpp
std::ostream& operator <<(std::ostream& os, const Annuaire& unAnnuaire)
{
os << unAnnuaire.m_ville;
}

erreur de compilation: m_ville is private!

Vraiment là je sais pas quoi penser.... Une fonction friend ne
devrait-elle pas avoir accès aux attributs de ma classe?
mon include .h est mis et tout compile sauf ça.



Tu peux écrire tout simplement:


class Annuaire
{
public:

friend std::ostream& operator <<(std::ostream& os, const Annuaire&
unAnnuaire)
{
std::cout << "nville:" << unAnnuaire.m_ville;
}

private:
std::string m_ville;
};


Pour + d'info voir aussi:
http://en.wikipedia.org/wiki/Barton%E2%80%93Nackman_trick


--
pixor
Publicité
Poster une réponse
Anonyme