Hola lista,

   Estoy escribiendo una clase para manejar unidades. Le agregué conversión
automatica a double, y constructor de copia desde double, además de los
operadores aritmeticos y de comparación.
   El problema es que me surgen ambiguedades cuando hago:


  Unit u(10.1);
  int a = u + 5; // ambiguedad operator+ (Unit, Unit) ;
operator+(double,int)

Mi espectativa es que cuando se pueda use Unit, o sea, que convierta el 5 a
Unit y aplique operator+(Unit, Unit).

Cómo puedo deshacerme de esta ambiguedad de forma correcta?

Gracias.

   La clase está declarada así:

class Unit
{
public:
    Unit();
    Unit(const double &Value);
    virtual ~Unit();
    //! conversion implicita a double
    operator double();
// --------------------------------- ASIGNACION
-------------------------------
    Unit& operator=(const Unit &rhs);
    Unit& operator+=(const Unit &rhs);
    Unit& operator-=(const Unit &rhs);
    Unit& operator*=(const Unit &rhs);
    Unit& operator/=(const Unit &rhs);
// --------------------------------- COMPARACION
-------------------------------
    bool operator==(const Unit &rhs)const;
private:
    double value_;    ///< Valor de la unidad
};

// --------------------------------- COMPARACION
-------------------------------
bool operator!=(const Unit &lhs, const Unit &rhs);
bool operator<(const Unit &lhs, const Unit &rhs);
bool operator>(const Unit &lhs, const Unit &rhs);
bool operator<=(const Unit &lhs, const Unit &rhs);
bool operator>=(const Unit &lhs, const Unit &rhs);
// -------------------------------- ARITMETICA
------------------------------
const Unit operator+(const Unit &lhs, const Unit &rhs);
const Unit operator-(const Unit &lhs, const Unit &rhs);
const Unit operator*(const Unit &lhs, const Unit &rhs);
const Unit operator/(const Unit &lhs, const Unit &rhs);

Saludos
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a