我正在建立一个大型数字班,我面临着一个我自己无法解决的问题。
首先,该类如下所示:
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);
它显示此错误:
'operator <'的模棱两可的重载(操作数类型为'bigNumber'和'int')
注意:候选人是:
注意:operator <(int,int)
注意:bool bigNumber :: operator <(bigNumber)
我如何键入bigNumber类以便于:
不再收到此错误
不使用显式类型转换
总是将int转换为bigNumber以便不丢失精度(我在写a<b
时没有这样做)
答案 0 :(得分:0)
首先,可能有损的操作应该是明确的。
第二,有3个重载:
friend bool operator==(bignumber const&,bignumber const&);
friend bool operator==(int,bignumber const&);
friend bool operator==(bignumber const&,int);