Я строю класс больших чисел и столкнулся с проблемой, которую не могу решить самостоятельно.
Прежде всего, класс выглядит так:
class bigNumber{
private:
char v[BNmaxLength];
int L;
void setll(long long int);
int comp(bigNumber);
void erase0();
void mult10(int);
void div10(int);
public:
bigNumber(){
setll(0);
}
bigNumber(long long int q){
setll(q);
}
bigNumber operator=(long long int);
operator int();
bool operator==(bigNumber);
bool operator!=(bigNumber);
bool operator<(bigNumber);
bool operator<=(bigNumber);
bool operator>(bigNumber);
bool operator>=(bigNumber);
bigNumber operator+(bigNumber);
bigNumber operator+=(bigNumber);
bigNumber& operator++();
bigNumber operator++(int);
bigNumber operator-(bigNumber);
bigNumber operator-=(bigNumber);
bigNumber& operator--();
bigNumber operator--(int);
bigNumber operator*(long long int);
bigNumber operator*=(long long int);
friend std::istream& operator>>(std::istream&, bigNumber&);
friend std::ostream& operator<<(std::ostream&, bigNumber);
};
И я хотел написать что-то вроде этого:
bigNumber b=276743;
int a;
a=b;
, поэтому я перегрузил оператор приведения типов из bigNumber в int следующим образом:
bigNumber::operator int(){
int a=0;
for(int i=L;i>=1;--i){
a*=10;
a+=v[i];
}
return a;
};
, но потом, если я наберу
bigNumber b=276743;
int a=34672;
cout<<(b<a);
отображает эту ошибку:
неоднозначная перегрузка для оператора '<(типы операндов' bigNumber 'и' int ') </p>
примечание:Возможные варианты:
note: operator <(int, int) </p>
note: bool bigNumber :: operator <(bigNumber) </p>
Как можно типизировать bigNumberкласс для того, чтобы:
больше не получать эту ошибку
не использовать явное приведение типов
всегда конвертируйте int в bigNumber, чтобы не потерять точность (я замечаю, что это не происходит, когда я пишу a<b
)