error cuando practico con clases (solucionado)

Iniciado por flony, 18 Junio 2012, 21:33 PM

0 Miembros y 1 Visitante están viendo este tema.

flony

hola amigos..estaba leyendo un libro y este código que voy a transcribir tenia unos pequeños errores (por lo menos eso me decía el compilador...pero la ultima parte me esta matando...si alguien me da una mano estaría genial
#include <iostream> //le borre el.h porque no funciona
using namespace std;  //el codigo original no tenia esta parte
class complex
{
private:
double real, imag;
public:
complex (double a, double b) //constructor
{real=a ; imag =b;}
~complex () {} //destructor
  //el codigo original tenia dos parentesis lo borre no tenian sentido
complex (complex& a) //constructor copia
{real=a.get_real(); imag=a.get_imag();}
complex& operator = (complex& m) //asignación
{real=m.get_real(); imag=m.get_imag(); return *this;}
double get_real (void) {return real;} //acceso al encapsulamiento
double get_imag (void) {return imag;}
friend ostream& operator << (ostream& os, complex& a)
{ //redefinición del operador <<
os << "Es un Complex=";
os << a.get_real() <<"+"<< a.get_imag () <<"i"<<endl;
return os;
}
};
int main (void) //programa principal
{
complex a(1.,1.); //definimos un objeto a complejo
complex b(double, double); //definimos un objeto b complejo
           //codigo orig. le faltaba el parentesis
b=a; //asignamos un complejo a otro
 complex c(a) ; //copiamos un complejo de otro
cout <<"complex a ="<<a.get_real()<<"+"<<a.get_imag()<<"i"<<endl;
cout <<"complex b ="<<b.get_real()<<"+"<<b.get_imag()<<"i""<<endl;
cout << c << endl;
return 0;
}

error
Citarc:\documents and settings\tissera\mis documentos\visual studio 2008\projects\hola mundo\hola mundo\hola.cpp(30) : error C2659: '=' : función como operando izquierdo
c:\documents and settings\tissera\mis documentos\visual studio 2008\projects\hola mundo\hola mundo\hola.cpp(33) : error C2228: el operando izquierdo de '.get_real' debe tener class/struct/union
c:\documents and settings\tissera\mis documentos\visual studio 2008\projects\hola mundo\hola mundo\hola.cpp(33) : error C2228: el operando izquierdo de '.get_imag' debe tener class/struct/union
c:\documents and settings\tissera\mis documentos\visual studio 2008\projects\hola mundo\hola mundo\hola.cpp(33) : error C2001: nueva línea en constante
c:\documents and settings\tissera\mis documentos\visual studio 2008\projects\hola mundo\hola mundo\hola.cpp(34) : error C2146: error de sintaxis : falta ';' delante del identificador 'cout'
El registro de compilación se guardó en el "file://c:\Documents and Settings\tissera\Mis documentos\Visual Studio 2008\Projects\hola mundo\hola mundo\Debug\BuildLog.htm"
hola mundo - 5 errores, 0 advertencias
========== Volver a generar todo: 0 correctos, 1 incorrectos, 0 omitidos ==========
por las dudas el libro es
CitarLluís Gil Espert
Montserrat Sánchez Romero
El C++ por la pràctica
Introducción al lenguaje y su filosofía
lindo para leer es pura practica
si un problema no tiene solucion entonces no es un problema...es algo inevitable

satu

Hola

No puedes hacer esto en el main:
Código (cpp) [Seleccionar]

complex b(double, double);

debes introducir los valores, no el tipo, igual que haces con "a":
Código (cpp) [Seleccionar]

complex a(1.,1.);
complex b(-1, -1);


Además te da otro fallo en el segundo cout del main porque te sobran las comillas del final "

Saludos
Breakbeat como forma de vida

flony

clarooooo...porque defino ya no declaro nada....el código original ni los paréntesis o lo de adentro tenia ....
y yo que pensaba que estaba aca el error
complex& operator = (complex& m) //asignación
o sea ya se que el compilador te da el lugar exacto del error pero mas de una vez me paso que el error estaba mas bien dado por errores de declaración mas que de definición
si un problema no tiene solucion entonces no es un problema...es algo inevitable

satu

Hola

Cita de: flony en 18 Junio 2012, 22:08 PM
el código original ni los paréntesis o lo de adentro tenia

Puede ser que no tenga los paréntesis pero para ello debes tener un constructor por defecto:

Código (cpp) [Seleccionar]

class complex {
private:
    double real, imag;
public:
    complex() {real = 0; imag = 0;}
...


En este caso sí puedes hacer lo que dices
Código (cpp) [Seleccionar]

int main (void) //programa principal
{
complex a(1.,1.); //definimos un objeto a complejo
complex b;
...


Saludos
Breakbeat como forma de vida

flony

si un problema no tiene solucion entonces no es un problema...es algo inevitable