je vous livre un extrait d'un programme que j'ai tapé texto à partir d'un
cours :
-- dans le
.h ------------------------------------------------------------------
class Money
{
friend ostream& operator<<(ostream& out, const Money& M);
public:
int Pounds, Pence;
}
-- dans le
.cpp ---------------------------------------------------------------
ostream& operator<<(ostream& out, const Money& M)
{
out<<'£'<<M.Pounds<<'.'<<setw(2)<<setfill('0')<<M.Pence;
return out;
}
----------------------------------------------------------------------------
---
Mon soucis est que lorsque je demande à Visual C++ de me compiler ça, il
m'envoie 2 erreurs
sur la redéfinition de << :
error C2248: 'Pounds' : cannot access private member declared in class
'Money'
error C2248: 'Pence' : cannot access private member declared in class
'Money'
Mise à part la position du protoype de operator<< (dans la section "public"
et non avant), l'exemple donné dans l'aide en ligne de Visual C++ est
strictement équivalent, et ne compile pas plus ! Elle dit pourtant bien que
"The friend keyword allows a function or class to gain access to the private
and protected members of a class.".
Je me demande donc ce qui peut empêcher ces 2 exemples de fonctionner. Une
idée ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alexandre
"Jean-Noël Mégoz" a écrit dans le message de news:4093c87b$0$8642$
Salut !
bonjour,
je vous livre un extrait d'un programme que j'ai tapé texto à partir d'un cours : -- dans le .h ------------------------------------------------------------------ class Money { friend ostream& operator<<(ostream& out, const Money& M); public: int Pounds, Pence; }
erreur de frappe ? Il manque un ; après le } de plus, tout étant public dans cette classe, il est inutile de définir l'opérateur en ami... j'aurais de plus mis des std::ostream à la place des ostream....
-- dans le .cpp --------------------------------------------------------------- ostream& operator<<(ostream& out, const Money& M) { out<<'£'<<M.Pounds<<'.'<<setw(2)<<setfill('0')<<M.Pence; return out; } -------------------------------------------------------------------------- --
--- Mon soucis est que lorsque je demande à Visual C++ de me compiler ça, il m'envoie 2 erreurs sur la redéfinition de << : error C2248: 'Pounds' : cannot access private member declared in class 'Money' error C2248: 'Pence' : cannot access private member declared in class 'Money'
étrange, puisqu'il n'y a pas de membre privé dans ta classe .
Mise à part la position du protoype de operator<< (dans la section "public"
et non avant), l'exemple donné dans l'aide en ligne de Visual C++ est strictement équivalent, et ne compile pas plus ! Elle dit pourtant bien que
"The friend keyword allows a function or class to gain access to the private
and protected members of a class.".
Je me demande donc ce qui peut empêcher ces 2 exemples de fonctionner. Une idée ?
J.No.
"Jean-Noël Mégoz" <nospam_jnmegoz@infonie.fr> a écrit dans le message de
news:4093c87b$0$8642$626a14ce@news.free.fr...
Salut !
bonjour,
je vous livre un extrait d'un programme que j'ai tapé texto à partir d'un
cours :
-- dans le
.h ------------------------------------------------------------------
class Money
{
friend ostream& operator<<(ostream& out, const Money& M);
public:
int Pounds, Pence;
}
erreur de frappe ? Il manque un ; après le }
de plus, tout étant public dans cette classe, il est inutile de définir
l'opérateur en ami...
j'aurais de plus mis des std::ostream à la place des ostream....
-- dans le
.cpp ---------------------------------------------------------------
ostream& operator<<(ostream& out, const Money& M)
{
out<<'£'<<M.Pounds<<'.'<<setw(2)<<setfill('0')<<M.Pence;
return out;
}
--------------------------------------------------------------------------
--
---
Mon soucis est que lorsque je demande à Visual C++ de me compiler ça, il
m'envoie 2 erreurs
sur la redéfinition de << :
error C2248: 'Pounds' : cannot access private member declared in class
'Money'
error C2248: 'Pence' : cannot access private member declared in class
'Money'
étrange, puisqu'il n'y a pas de membre privé dans ta classe .
Mise à part la position du protoype de operator<< (dans la section
"public"
et non avant), l'exemple donné dans l'aide en ligne de Visual C++ est
strictement équivalent, et ne compile pas plus ! Elle dit pourtant bien
que
"The friend keyword allows a function or class to gain access to the
private
and protected members of a class.".
Je me demande donc ce qui peut empêcher ces 2 exemples de fonctionner. Une
idée ?
"Jean-Noël Mégoz" a écrit dans le message de news:4093c87b$0$8642$
Salut !
bonjour,
je vous livre un extrait d'un programme que j'ai tapé texto à partir d'un cours : -- dans le .h ------------------------------------------------------------------ class Money { friend ostream& operator<<(ostream& out, const Money& M); public: int Pounds, Pence; }
erreur de frappe ? Il manque un ; après le } de plus, tout étant public dans cette classe, il est inutile de définir l'opérateur en ami... j'aurais de plus mis des std::ostream à la place des ostream....
-- dans le .cpp --------------------------------------------------------------- ostream& operator<<(ostream& out, const Money& M) { out<<'£'<<M.Pounds<<'.'<<setw(2)<<setfill('0')<<M.Pence; return out; } -------------------------------------------------------------------------- --
--- Mon soucis est que lorsque je demande à Visual C++ de me compiler ça, il m'envoie 2 erreurs sur la redéfinition de << : error C2248: 'Pounds' : cannot access private member declared in class 'Money' error C2248: 'Pence' : cannot access private member declared in class 'Money'
étrange, puisqu'il n'y a pas de membre privé dans ta classe .
Mise à part la position du protoype de operator<< (dans la section "public"
et non avant), l'exemple donné dans l'aide en ligne de Visual C++ est strictement équivalent, et ne compile pas plus ! Elle dit pourtant bien que
"The friend keyword allows a function or class to gain access to the private
and protected members of a class.".
Je me demande donc ce qui peut empêcher ces 2 exemples de fonctionner. Une idée ?
J.No.
Jean-Noël Mégoz
"Alexandre" a écrit dans le message de news:4093e72e$0$20745$
class Money { friend ostream& operator<<(ostream& out, const Money& M); public: int Pounds, Pence; }
erreur de frappe ? Il manque un ; après le }
Erreur, oui, mais de copier/coller : le ";" est bien présent dans mon code...
"Alexandre" <alex.g@netcourrier.com> a écrit dans le message de
news:4093e72e$0$20745$626a14ce@news.free.fr...
class Money
{
friend ostream& operator<<(ostream& out, const Money& M);
public:
int Pounds, Pence;
}
erreur de frappe ? Il manque un ; après le }
Erreur, oui, mais de copier/coller : le ";" est bien présent dans mon
code...
"Alexandre" a écrit dans le message de news:4093e72e$0$20745$
class Money { friend ostream& operator<<(ostream& out, const Money& M); public: int Pounds, Pence; }
erreur de frappe ? Il manque un ; après le }
Erreur, oui, mais de copier/coller : le ";" est bien présent dans mon code...
Jean-Noël Mégoz
"Alexandre" a écrit dans le message de news:4093e72e$0$20745$
class Money { friend ostream& operator<<(ostream& out, const Money& M); public: int Pounds, Pence; }
erreur de frappe ? Il manque un ; après le } de plus, tout étant public dans cette classe, il est inutile de définir l'opérateur en ami... j'aurais de plus mis des std::ostream à la place des ostream....
pour les "std::" manquants, c'est normal car il est précisé "using namespace std;" au début du fichier.
"Alexandre" <alex.g@netcourrier.com> a écrit dans le message de
news:4093e72e$0$20745$626a14ce@news.free.fr...
class Money
{
friend ostream& operator<<(ostream& out, const Money& M);
public:
int Pounds, Pence;
}
erreur de frappe ? Il manque un ; après le }
de plus, tout étant public dans cette classe, il est inutile de définir
l'opérateur en ami...
j'aurais de plus mis des std::ostream à la place des ostream....
pour les "std::" manquants, c'est normal car il est précisé "using namespace
std;" au début du fichier.
"Alexandre" a écrit dans le message de news:4093e72e$0$20745$
class Money { friend ostream& operator<<(ostream& out, const Money& M); public: int Pounds, Pence; }
erreur de frappe ? Il manque un ; après le } de plus, tout étant public dans cette classe, il est inutile de définir l'opérateur en ami... j'aurais de plus mis des std::ostream à la place des ostream....
pour les "std::" manquants, c'est normal car il est précisé "using namespace std;" au début du fichier.
drkm
"Jean-Noël Mégoz" writes:
Salut !
je vous livre un extrait d'un programme que j'ai tapé texto à partir d'un cours :
[...]
Ce qui est étrange, c'est que les champs de ta classe sont publiques. Une erreur de recopiage, j'imagine ? Inclus-tu l'entête définissant ta classe dans le fichier implémentant l'opérateur de sortie ? Et que ce passe-t-il si tu déclare l'opérateur avant la classe, dans l'entête ? Comme ceci :
je vous livre un extrait d'un programme que j'ai tapé texto à partir
d'un cours :
[...]
Ce qui est étrange, c'est que les champs de ta classe sont
publiques. Une erreur de recopiage, j'imagine ? Inclus-tu l'entête
définissant ta classe dans le fichier implémentant l'opérateur de
sortie ? Et que ce passe-t-il si tu déclare l'opérateur avant la
classe, dans l'entête ? Comme ceci :
je vous livre un extrait d'un programme que j'ai tapé texto à partir d'un cours :
[...]
Ce qui est étrange, c'est que les champs de ta classe sont publiques. Une erreur de recopiage, j'imagine ? Inclus-tu l'entête définissant ta classe dans le fichier implémentant l'opérateur de sortie ? Et que ce passe-t-il si tu déclare l'opérateur avant la classe, dans l'entête ? Comme ceci :