初学渣遇到的关于C++编译异常的有关问题,求大神帮忙看看
初学渣遇到的关于C++编译错误的问题,求大神帮忙看看
error C2666: '+' : 2 overloads have similar conversions
为什么a=a+1这行错误了?用的VC6,求帮忙看看
#include<iostream>
using namespace std;
class Rational
{
public:
int fenzi;
int fenmu;
Rational(int fz,int fm);
Rational(double x);
operator double();
friend Rational operator+(const Rational &a,const Rational &b);
friend ostream &operator<<(ostream &,const Rational &c);
};
int gcd(int x1,int x2)
{
int t,x3,x4;
if(x1==0)
return 1;
if(x1<=x2)
{
x3=x1;
x4=x2;
}
else
{
x3=x2;
x4=x1;
}
while(x3!=0)
{
t=x3;
x3=x4%x3;
x4=t;
}
return x4;
}
Rational::Rational(int fz,int fm=1)
{
int Gcd;
Gcd=gcd(fz,fm);
fz=fz/Gcd;
fm=fm/Gcd;
fenzi=fz;
fenmu=fm;
}
Rational::Rational(double x)
{
int Gcd,fz,fm;
fz=int(x*1e6);
fm=int(1e6);
Gcd=gcd(fz,fm);
fz=fz/Gcd;
fm=fm/Gcd;
fenzi=fz;
fenmu=fm;
}
Rational operator+(Rational &a,Rational &b)
{
int z=a.fenzi*b.fenmu+a.fenmu*b.fenzi;
int m=a.fenmu*b.fenmu;
return Rational(z,m);
}
ostream & operator<<(ostream &output,const Rational &c)
{
output<<c.fenzi;
output<<"/"<<c.fenmu;
output<<endl;
return output;
}
Rational::operator double()
{
return fenzi*1.0/fenmu;
}
int main()
{
Rational a(9,2);
a=a+1;
}
------解决方案--------------------
operator double();
Rational::Rational(int fz,int fm=1);
所以a+1可以是把a转为doulbe再和1相加,或把1转为Rational再和a相加。
error C2666: '+' : 2 overloads have similar conversions
为什么a=a+1这行错误了?用的VC6,求帮忙看看
#include<iostream>
using namespace std;
class Rational
{
public:
int fenzi;
int fenmu;
Rational(int fz,int fm);
Rational(double x);
operator double();
friend Rational operator+(const Rational &a,const Rational &b);
friend ostream &operator<<(ostream &,const Rational &c);
};
int gcd(int x1,int x2)
{
int t,x3,x4;
if(x1==0)
return 1;
if(x1<=x2)
{
x3=x1;
x4=x2;
}
else
{
x3=x2;
x4=x1;
}
while(x3!=0)
{
t=x3;
x3=x4%x3;
x4=t;
}
return x4;
}
Rational::Rational(int fz,int fm=1)
{
int Gcd;
Gcd=gcd(fz,fm);
fz=fz/Gcd;
fm=fm/Gcd;
fenzi=fz;
fenmu=fm;
}
Rational::Rational(double x)
{
int Gcd,fz,fm;
fz=int(x*1e6);
fm=int(1e6);
Gcd=gcd(fz,fm);
fz=fz/Gcd;
fm=fm/Gcd;
fenzi=fz;
fenmu=fm;
}
Rational operator+(Rational &a,Rational &b)
{
int z=a.fenzi*b.fenmu+a.fenmu*b.fenzi;
int m=a.fenmu*b.fenmu;
return Rational(z,m);
}
ostream & operator<<(ostream &output,const Rational &c)
{
output<<c.fenzi;
output<<"/"<<c.fenmu;
output<<endl;
return output;
}
Rational::operator double()
{
return fenzi*1.0/fenmu;
}
int main()
{
Rational a(9,2);
a=a+1;
}
------解决方案--------------------
operator double();
Rational::Rational(int fz,int fm=1);
所以a+1可以是把a转为doulbe再和1相加,或把1转为Rational再和a相加。