Un ami de la fonction n'est pas une fonction membre, de sorte que le problème, c'est que vous déclarez operator<<
comme un ami de l' A
:
friend ostream& operator<<(ostream&, A&);
ensuite, essayez de le définir comme une fonction membre de la classe logic
ostream& logic::operator<<(ostream& os, A& a)
^^^^^^^
Êtes-vous confus au sujet de si logic
est une classe ou d'un espace de noms?
L'erreur est parce que vous avez essayé de définir un membre de l' operator<<
prenant deux arguments, ce qui signifie qu'elle prend trois arguments, y compris l'implicite this
paramètre. L'opérateur ne peut prendre que deux arguments, de sorte que lorsque vous écrivez a << b
les deux arguments sont a
et b
.
Vous souhaitez définir ostream& operator<<(ostream&, const A&)
en tant que non-membre de la fonction, certainement pas en tant que membre de l' logic
car il n'a rien à voir avec cette classe!
std::ostream& operator<<(std::ostream& os, const A& a)
{
return os << a.number;
}