En un proyecto en el que estoy trabajando, tengo una clase Score
, definida a continuación en score.h
. Estoy intentando sobrecargarlo, así que, cuando se realiza una operación <<
, se imprime _points + " " + _name
.funciones 'amigo' y << sobrecarga del operador: ¿Cuál es la forma correcta de sobrecargar a un operador para una clase?
Esto es lo que he intentado hacer:
ostream & Score::operator<< (ostream & os, Score right)
{
os << right.getPoints() << " " << right.scoreGetName();
return os;
}
Éstos son los errores devueltos:
score.h(30) : error C2804: binary 'operator <<' has too many parameters
(Este error aparece 4 veces, en realidad)
me las arreglé para conseguir que funcione al declarar la sobrecarga como una función amiga:
friend ostream & operator<< (ostream & os, Score right);
Y eliminando el Score::
de la declaración de función en score.cpp (de hecho no lo declara como miembro).
¿Por qué funciona esto, sin embargo, la antigua pieza de código no?
¡Gracias por su tiempo!
EDITAR
He eliminado todas las menciones a la sobrecarga en el archivo de cabecera ... todavía tengo la (y único) de error siguiente. binary '<<' : no operator found which takes a right-hand operand of type 'Score' (or there is no acceptable conversion)
¿Cómo es que mi prueba, en main(), no puede encontrar la sobrecarga adecuada? (No se incluye el, he comprobado)
A continuación se muestra la score.h completa
#ifndef SCORE_H_
#define SCORE_H_
#include <string>
#include <iostream>
#include <iostream>
using std::string;
using std::ostream;
class Score
{
public:
Score(string name);
Score();
virtual ~Score();
void addPoints(int n);
string scoreGetName() const;
int getPoints() const;
void scoreSetName(string name);
bool operator>(const Score right) const;
private:
string _name;
int _points;
};
#endif
Agradable, respuesta completa. –
Acceda a las partes privadas de la clase: Rawr. J/K, muchas gracias, todavía queda una pregunta: Eliminé todas las menciones de la sobrecarga en el archivo de encabezado ... pero me sale el siguiente (y único) error. 'binary '<<': no se encontró operador que tome un operando de la derecha del tipo 'Score' (o no hay una conversión aceptable)' ¿Cómo es que mi prueba, en main(), no puede encontrar el ¿sobrecarga? (no es el incluye). –
Debe poner la declaración del 'operator <<' right con la definición de su clase: que está en el mismo encabezado y en el mismo espacio de nombres. De esta forma, no se olvidará de incluirlo y el compilador podrá recogerlo cuando busque sobrecargas aceptables. –