109 votes

l'opérateur << doit prendre exactement un argument

ah

 #include "logic.h"
...

class A
{
friend ostream& operator<<(ostream&, A&);
...
};
 

logic.cpp

 #include "a.h"
...
ostream& logic::operator<<(ostream& os, A& a)
{
...
}
...
 

Quand je compile, ça dit:

std :: ostream & logic :: operator << (std :: ostream &, A &) 'doit prendre exactement un argument.

Quel est le problème?

155voto

Cat Plus Plus Points 53385

Le problème est que vous le définissez dans la classe, ce qui a) signifie que le deuxième argument est implicite ( this ) et b) il ne fera pas ce que vous voulez, à savoir étendre std::ostream . Vous devez le définir comme une fonction libre:

 class A { /* ... */ };
std::ostream& operator<<(std::ostream&, const A& a);
 

58voto

Jonathan Wakely Points 45593

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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X