Hola:
Parece que el error se refiera a que la función que sobrecarga << no tenga acceso a los miembros privados de la clase.¿Puede ser que le quitaras la declaración de
friend?
Te pongo un ejemplo que debería de funcionarte, a ver si puedes detectar el error
Fichero h:
Código C++:
Ver original#ifndef RACIONAL_H
#define RACIONAL_H
#include <iostream>
using namespace std;
class Racional
{
public:
Racional():Num(1),Den(1) {}
Racional(long numerador, long denominador):Num(numerador),Den(denominador) {}
Racional(const Racional& copia);
long int LeeNum()const{return Num;}
long int LeeDen()const{return Den;}
friend ostream& operator<< (ostream& stream, const Racional& elem);
private:
long int Num;
long int Den;
long int mcd(long a, long b);
};
#endif // RACIONAL_H
Fichero cpp:
Código C++:
Ver original#include "../include/Racional.h"
ostream& operator<< (ostream& stream, const Racional& elem)
{
stream << elem.Num << "/" << elem.Den; //necesito friend para usar Num y Den q son privados
return stream;
}
Un main para ver si funciona la cosa
Código C++:
Ver original#include "./include/Racional.h"
int main()
{
Racional valor;
cout<<valor.LeeNum()<<endl;
cout<<valor.LeeDen()<<endl;
cout<<valor<<endl;
Racional valor2(10,20);
cout<<valor2<<endl;
return 0;
}
Respecto a la cláusula const, si defines la función como:
Lo que le estás diciendo es que retorne un
const long. Como Num es del tipo
long, pues se quejará. (no hay que confundir
long con
const long). C/C++ es un lenguaje fuertemente tipado y no pasa ni una
)
Para asegurarse de que la función no modifica el valor que lee, y que sólo lo devuelve, has de declararla así:
(bueno, verás que el tipo es long int y que le he cambiado el nombre, pero igualmente:
Saludos