En el problema original:
Dentro de las funciones de sobrecarga de operador (por ejemplo, en Fraccion operator+ ), te declarabas una variable "Fraccion temporal" que te daba un problema:
Cuando escribes el constructor de una clase, ya no dispones de los constructores por defecto que te da el lenguaje (salvo el constructor copia, pero eso es otro rollo). En tu caso, la clase Fraccion sólo tiene UN constructor, y toma dos argumentos. Cuando tratas de hacer algo como:
...el compilador te dice que no sabe como crear el objeto, y es lógico, no se lo has dicho.
Otra cosa, no sobrecargaste el operador /= como para poder usarlo en tu función main de prueba.
Como recomendación, y consiente de que no sé lo que tienes que hacer en detalle, tu clase de Fracciones podría ser mejorada en funcionalidad; por ejemplo, no me gusta la idea de abortar el programa si el denominador de una fracción se vuelve cero... considera conservar su valor y, a la hora de imprimirlo por pantalla, escribe algo asi como "infinity", ó "indeterminado (denominador 0)", revisando siempre este detalle antes de realizar cálculos (porque, ¿Cuánto da una fracción por otra que esta indeterminada? ). Una ultima cosa,
calculas mal la suma (no se las otras operaciones, no revisé), pero esto ya lo verás tu.
Aca te dejo el codigo que funciona (modificado el constructor):
#include<stdlib.h>
#include<iostream>
#include<math.h>
using namespace std;
class Fraccion{
int numerador;
int denominador;
public:
/*
* Cambiamos le constructor para usar inicializacion de miembros
*/
Fraccion(int a=0, int b=1): numerador(a), denominador(b)
{
if (b==0)
{
// Si realmente quieres terminar el programa por esto
cerr << "Error: fraccion con denominador 0)" << endl;
exit(-1);
}
}
Fraccion operator+(Fraccion objeto){
Fraccion temporal;
temporal.denominador=((this->numerador*objeto.denominador)+(this->denominador*objeto.numerador));
temporal.numerador=(this->denominador*objeto.denominador);
return temporal;
}
Fraccion operator/(Fraccion objeto){
Fraccion temporal2;
temporal2.numerador=(this->numerador*objeto.denominador);
temporal2.denominador=(this->denominador*objeto.numerador);
return temporal2;
}
Fraccion operator--(int notused){
numerador--;
denominador--;
return *this;
}
/*
* Ahora imprime con un salto de linea al final del archivo
*/
void mostrar()
{
cout << numerador << "/" << denominador << endl;
}
};
int main()
{
char aux;
Fraccion fraccion01(5,3),fraccion02(17,5),fraccion03(0,1);
fraccion03=fraccion01+fraccion02;
fraccion03.mostrar();
fraccion01 = fraccion01/fraccion02;
fraccion01.mostrar();
fraccion01--;
fraccion01.mostrar();
cin >> aux;
// getchar();
}