Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/05/2014, 14:33
Ch3Ch0
 
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 7 meses
Puntos: 0
Exclamación Error con conversion de tipos/c++

Hola, como estan? bueno, paso a dejarles un problema que tengo con un codigo de un libro que transcribi al compilador. Me tira dos errores en la funcion de conversion 'operator inventario2()' y no lo puedo solucionar. El tema es que cuando saco esa funcion el programa me funciona sin problemas porque se ve que utiliza 'inventario2(inventario1 p)'...supongo que me esta generando un conflicto porque no puede invocar a la funcion y al constructor a la vez. Pero cuando saco el constructor para usar la funcion me vuelve a tirar error, mi pregunta es ¿Como hago para usar solo la funcion de conversion sin que me tire estos errores? (sin modificar todo el codigo claro). A continuacion les paso el codigo para que vean:

#include <iostream>
using namespace std;

class inventario2; //Clase destino creada

class inventario1 { //Clase fuente
int codigo; //Codigo de unidad
int unidades; //Numero de unidades
float precio; //Coste de cada unidad
public:
inventario1(int a, int b, float c) {
codigo = a;
unidades = b;
precio = c;
}
void putdatos() {
cout<<" Codigo = "<<codigo<<"\n";
cout<<" Unidades = "<<unidades<<"\n";
cout<<" Precio = "<<precio<<"\n";
}
int getcodigo() {
return codigo;
}
int getunidades() {
return unidades;
}
float getprecio() {
return precio;
}
operator float() {
return (unidades * precio);
}
operator inventario2() {
inventario2 temp;
temp.codigo = codigo;
temp.valor = precio * unidades;
return temp;
}
}; //Fin de la clase fuente
class inventario2 {
int codigo;
float valor;
public:
inventario2() {
codigo = 0;
valor = 0;
}
inventario2(int x, float y) { //Constructor
codigo = x; //para inicializacion
valor = y;
}
void putdatos() {
cout<<" Codigo = "<<codigo<<"\n";
cout<<" Valor = "<<valor<<"\n";
}
inventario2(inventario1 p) { //Constructor para conversion
codigo = p.getcodigo();
valor = p.getunidades() * p.getprecio();
}
}; //Fin de la clase destino

int main(int argc, char *argv[]) {
inventario1 s1(100, 5, 140.0);
inventario2 s2;
float valor_total;

/* inventario1 a float */
valor_total = s1;
/* inventario1 a inventario2 */
s2 = s1;

cout<<" Detalles de productos - inventario tipo 1 "<<"\n";
s1.putdatos();

cout<<"\n Valor del almacen "<<"\n";
cout<<" Valor = "<<valor_total<<"\n\n";

cout<<" Detalles de productos - inventario tipo 2 "<<"\n";
s2.putdatos();

return 0;
}