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:
Lo que está obligando siempre a crear el objeto Circulo con un valor float.
Entonces, cuando creas el objeto en main así:
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 originalCirculo c1(5.6) //<-Valido
float radio =2.77;
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.
y
Código C++:
Ver originalCirculo::Circulo(float r )
{
Radio = r;
}
Así, si inicias de objeto de esta forma:
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 originalvoid SetRadio(float valor){Radio=valor;}
Saludos