Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: flony en 18 Junio 2012, 21:33 pm



Título: error cuando practico con clases (solucionado)
Publicado por: flony en 18 Junio 2012, 21:33 pm
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
Código:
#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
Citar
c:\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
Citar
Lluí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


Título: Re: error cuando practico con clases
Publicado por: satu en 18 Junio 2012, 22:02 pm
Hola

No puedes hacer esto en el main:
Código
  1. complex b(double, double);
  2.  
debes introducir los valores, no el tipo, igual que haces con "a":
Código
  1. complex a(1.,1.);
  2. complex b(-1, -1);
  3.  

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

Saludos


Título: Re: error cuando practico con clases
Publicado por: flony en 18 Junio 2012, 22:08 pm
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
Código:
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


Título: Re: error cuando practico con clases
Publicado por: satu en 18 Junio 2012, 22:22 pm
Hola

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
  1. class complex {
  2. private:
  3.    double real, imag;
  4. public:
  5.    complex() {real = 0; imag = 0;}
  6. ...
  7.  

En este caso sí puedes hacer lo que dices
Código
  1. int main (void) //programa principal
  2. {
  3. complex a(1.,1.); //definimos un objeto a complejo
  4. complex b;
  5. ...
  6.  

Saludos


Título: Re: error cuando practico con clases
Publicado por: flony en 18 Junio 2012, 22:24 pm
 ;-) ;-) ;-) ;-) ;-)
gracias
 ;-) ;-) ;-) ;-) ;-)