<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Mmm...no se si me equivoco, pero...el operator << debe ser friend, como lo tienes puesto, pero nada de ponerlo en private, y tampoco en public. <br>Yo cuando redefino el operador << lo que hago es esto:<br><br><pre>class complejo {<br> friend std::ostream& operator << (ostream& output, const complejo& z);<br><br> public:<br> complejo (double aa=0.0, double bb=0.0);<br> complejo operator +(const complejo& z);<br> <br> private:<br> double a,b;<br> <br> };<br><br>De todas formas, casualmente, me coges con una clase TComplejo que he usado a lo largo de este año, en la universidad. <br>La declaración de la misma es la que sigue, ten en cuenta que tengo unos cuantos métodos más que no te sirven, <br>pero para que te hagas una idea de donde definir el operator <<:<br><br>class TComplejo{<br> friend bool operator<(const TComplejo&,const TComplejo&);<br> friend bool operator>(const TComplejo&,const TComplejo&);<br> friend TComplejo operator+(const double,const TComplejo&);<br> friend TComplejo operator-(const double,const TComplejo&);<br> friend TComplejo operator*(const double,const TComplejo&);<br> friend ostream& operator<<(ostream &,const TComplejo &);<br> private:<br> double re;<br> double im;<br> public:<br> TComplejo(double = 0,double = 0);<br> TComplejo(const TComplejo&);<br> ~TComplejo();<br> TComplejo& operator=(const TComplejo&);<br> TComplejo operator+(const TComplejo&);<br> TComplejo operator-(const TComplejo&);<br> TComplejo operator*(const TComplejo&);<br> TComplejo operator+(const double);<br> TComplejo operator-(const double);<br> TComplejo operator*(const double);<br> bool operator==(const TComplejo&) const;<br> bool operator!=(const TComplejo&);<br> double Re() const; //Devuelve parte real<br> double Im() const; //Devuelve parte imaginaria<br> void Re(double); //Modifica parte real<br> void Im(double); //Modifica parte imaginaria<br> double Arg(void) const;<br> double Mod(void) const; //Calcula el módulo<br> <br>};<br><br>Esta clase, te adelanto, que es totalmente funcional. Un saludo y espero que te sirva algo de todo esto. ;)<br></pre><br><br>> To: cconclase@listas.conclase.net<br>> From: ddagnino@gmail.com<br>> Date: Wed, 27 May 2009 17:23:45 +0200<br>> Subject: [C con Clase] que no compila<br>> <br>> Hola gente,<br>> estoy empezando a programar con clases y me he roto la cabeza buscando errores en el siguiente programa, haber si me podéis echar un cable.<br>> <br>> El main.cpp es:<br>> #include <cstdlib><br>> <br>> #include <iostream><br>> #include <cmath><br>> #include "complejos.h"<br>> <br>> using namespace std;<br>> <br>> <br>> <br>> int main(){<br>> <br>> complejo z1(1.,2.),z2(3.,4.);<br>> cout << "z1 = " << z1 << endl;<br>> cout << "z2 = " << z2 << endl;<br>> cout << "z1+z2 = " << z1+z2 << endl;<br>> <br>> getchar();<br>> return 0;<br>> <br>> }<br>> <br>> El complejos.h es:<br>> #ifndef _COMPLEJOS_H_<br>> <br>> #define _COMPLEJOS_H_<br>> <br>> <br>> class complejo {<br>> public:<br>> complejo (double aa=0.0, double bb=0.0);<br>> complejo operator +(const complejo& z);<br>> <br>> private:<br>> friend std::ostream& operator << (ostream& output, const complejo& z);<br>> <br>> double a,b;<br>> <br>> };<br>> <br>> #endif<br>> <br>> Y el complejos.cpp es:<br>> #include <iostream><br>> #include <cmath><br>> #include "complejos.h"<br>> using namespace std;<br>> <br>> inline complejo::complejo (double aa, double bb): a(aa), b(bb) {}<br>> <br>> inline std::ostream& operator << (ostream& output, const complejo& z){<br>> output << z.a << " " << z.b;<br>> return output;<br>> }<br>> <br>> <br>> inline complejo complejo::operator +(const complejo& z){<br>> <br>> complejo temp (a+z.a , b+z.b);<br>> <br>> return temp;<br>> <br>> }<br>> <br>> El Makefile es (creo que no hace falta pero yo lo meto):<br>> CXX = g++<br>> CCFLAGS = -g -Wall<br>> <br>> myproj: main.o complejos.o<br>> $(CXX) $(CCFLAGS) -o myproj main.o complejos.o<br>> <br>> complejos.o: complejos.cpp complejos.h<br>> $(CXX) $(CCFLAGS) -c complejos.cpp<br>> <br>> main.o: main.cpp complejos.h<br>> $(CXX) $(CCFLAGS) -c main.cpp<br>> <br>> El error al compilar es enorme así que no lo pongo, aun así lo que si me dice al principio es literalmente "la declaración de ‘operator<<’ como algo que no es función". He buscado en internet y he probado mil formas de escribir lo mismo pero siempre me peta al compila. Bueno, ya se que quizás estoy pidiendo mucho pero cualquier ayuda es bienvenida.<br>> Saludos y gracias de ante mano,<br>> Dani.<br>> _______________________________________________<br>> Lista de correo Cconclase Cconclase@listas.conclase.net<br>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<br>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<br><br /><hr />El nuevo Windows Live tiene mucho que ofrecerte. <a href='http://www.windowslive.es ' target='_new'>Descúbrelo en estos vídeos </a></body>
</html>