|
|
|
| Всем привет!
Помогите разобраться с перегрузкой операторов.
Хочу реализовать класс который будет представлять тип double с определенной точностью. Еще нужна возможность преобразования в тип int и double.
template <unsigned int precision>
class SDouble
{
public:
// uninitialized
SDouble ();
// construction
SDouble (double fX);
SDouble (int fX);
//copy constructor
SDouble (const SDouble& rkSD);
// assignment
inline SDouble& operator= (const SDouble&);
// comparison
bool operator== (const SDouble&) const;
bool operator!= (const SDouble&) const;
bool operator< (const SDouble&) const;
bool operator<= (const SDouble&) const;
bool operator> (const SDouble&) const;
bool operator>= (const SDouble&) const;
//unary operations
inline SDouble operator-() const;
inline SDouble operator+() const;
//arithmetic operations
inline SDouble operator+ (const SDouble&) const;
inline SDouble operator- (const SDouble&) const;
inline SDouble operator* (const SDouble&) const;
inline SDouble operator/ (const SDouble&) const;
// arithmetic updates
inline SDouble& operator+= (const SDouble&);
inline SDouble& operator-= (const SDouble&);
inline SDouble& operator*= (const SDouble&);
inline SDouble& operator/= (const SDouble&);
//arithmetic operations
template <unsigned int precision>
friend SDouble<precision> operator+ (double s_value, const SDouble<precision>&);
template <unsigned int precision>
friend SDouble<precision> operator- (double s_value, const SDouble<precision>&);
template <unsigned int precision>
friend SDouble<precision> operator* (double s_value, const SDouble<precision>&);
template <unsigned int precision>
friend SDouble<precision> operator/ (double s_value, const SDouble<precision>&);
//type cast
operator int();
operator double();
//value
double getValue() const;
private:
double supp_val_precision(double) const;
private:
double m_Value;
};
При попытке выполнить код:
SDouble<4> sd(7.12);
SDouble<4> sdr =-sd + 5.0;
Получаю:
1>d:\programming\freelance\mathematic_library\release\my_new_library001\my_new_library\main.cpp(443) : error C2666: 'SDouble<degree>::operator +' : 3 overloads have similar conversions
1> with
1> [
1> degree=4
1> ]
1> d:\programming\freelance\mathematic_library\release\my_new_library001\my_new_library\sdouble.hpp(39): could be 'SDouble<degree> SDouble<precision>::operator +(const SDouble<precision> &) const'
1> with
1> [
1> precision=4
1> ]
1> or 'built-in C++ operator+(int, double)'
1> or 'built-in C++ operator+(double, double)'
1> while trying to match the argument list '(SDouble<precision>, double)'
1> with
1> [
1> precision=4
1> ] | |
|
|