Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/02/2014, 03:15
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: No se compila el siguiente codigo

Creo que el error lo tienes en la forma de crear el objeto Circulo, que a su vez delata una mala implementación del constructor.

Tu constructor dice:
Código C++:
Ver original
  1. Cuadrado(float);
Lo que está obligando siempre a crear el objeto Circulo con un valor float.

Entonces, cuando creas el objeto en main así:
Código C++:
Ver original
  1. Circulo c();
Se crea con un valor no válido. Pero el problema salta cuando quieres calcular su área.

Es más discutible lo otro que he dicho, lo de que la implementación del constructor es mala. Puede que te interese que siempre tenga un valor expreso y definido. En cuyo caso no olvides de iniciarlo con un valor en el interior.
Código C++:
Ver original
  1. Circulo c1(5.6) //<-Valido
  2. float radio =2.77;
  3. Circulo c2(radio)//<-Valido

Pero igual es más interesante que el constructor tenga un valor por defecto, por si no siempre te interesa inicializar su valor del radio.

Código C++:
Ver original
  1. Circulo(float r=0);
y
Código C++:
Ver original
  1. Circulo::Circulo(float r )
  2. {
  3. Radio = r;
  4. }

Así, si inicias de objeto de esta forma:
Código C++:
Ver original
  1. Circulo c;
Pues tendrás un objeto con el radio=0 (o al valor que le pongas al constructor. Y no te dará error.

Y ya puestos con respecto al programa, pues no tiene mucho sentido que la función calcularArea() pida el radio, ya que se entiende que no es una función para calcular un área cualquiera, sino para calcular el área del Circulo que has creado. Es más lógico que si quieres redefinir el radio, lo hagas por medio de su función set correspondiente, y que la función calcularArea() se limite a calcular el área del objeto con el radio dado..

Y ahora que lo miro, la función setArea() la tienes mal, ya que está devolviendo un valor, y a ti te interesa que modifique el valor de radio. Sería así:
Código C++:
Ver original
  1. void SetRadio(float valor){Radio=valor;}

Saludos