using namespace std;
class Complex
{public:
Complex(){real=0;imag=0;}
Complex(double r){real=r;imag=0;}
Complex(double r,double i){real=r;imag=i;}
operator double(){cout<<return real;}
friend Complex operator + (Complex c1,Complex c2);
void display();
private:
double real;
double imag;
};
Complex operator + (Complex c1,Complex c2)
{return Complex(c1.real+c2.real, c1.imag+c2.imag);}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
int main()
{Complex c1(3,4),c2(5,-10),c3;
c3=c1+2.5;
c3.display();
return 0;
}
这个程序的错误在于有二义性!
但是我不知道原因是从哪里引起的!
望高手指教。。。。。。
9 个解决方案
#1
c3=c1+Complex(2.5);
operator double(){return real;}
friend Complex operator + (Complex c1,Complex c2);
c.c:24: note: candidates are: operator+(double, double) <built-in>
c.c:17: note: Complex operator+(Complex, Complex)
#2
去看《C++ Primer》在讲解了自定义类型转换后,重总结重载判决规则的章节,一条条对,你就会发现原因了。
#3
因为你定义了一个
operator double();
同时又有一个单参的构造函数:
Complex(double r);
所以编译
c3=c1+2.5;
时, 编译器不知道是通过构造函数Complex(double r)将2.5转换为Complex好呢,
还是通过operator double()将c1转换为double好呢.
所以去掉operator double()就可以了.
operator double();
同时又有一个单参的构造函数:
Complex(double r);
所以编译
c3=c1+2.5;
时, 编译器不知道是通过构造函数Complex(double r)将2.5转换为Complex好呢,
还是通过operator double()将c1转换为double好呢.
所以去掉operator double()就可以了.
#4
operator double(){cout < <return real;}
没见过。。。
谁能解释一下。。。或给个链接
如果太简单。。。那就当什么也没发生
没见过。。。
谁能解释一下。。。或给个链接
如果太简单。。。那就当什么也没发生
#5
是一种 定义隐藏的 转换??把 double 转换成 complex ??
那把 Complex(double r){real=r;imag=0;} 去了。。 是不是也正确??
那把 Complex(double r){real=r;imag=0;} 去了。。 是不是也正确??
#6
但是赋值就不正确了,一个double赋给一个Complex
#7
呵呵 很明显!~
#8
因为你没有定义Complex(int,int){}
#9
C/C++ codec3=c1+Complex(2.5);
operator double(){return real;}
friend Complex operator + (Complex c1,Complex c2);
c.c:24: note: candidates are: operator+(double, double) <built-in>
c.c:17: note: Complex operator+(Complex, Complex)
这些都是什么意思?
看不懂,望指教....
operator double(){return real;}
friend Complex operator + (Complex c1,Complex c2);
c.c:24: note: candidates are: operator+(double, double) <built-in>
c.c:17: note: Complex operator+(Complex, Complex)
这些都是什么意思?
看不懂,望指教....
#1
c3=c1+Complex(2.5);
operator double(){return real;}
friend Complex operator + (Complex c1,Complex c2);
c.c:24: note: candidates are: operator+(double, double) <built-in>
c.c:17: note: Complex operator+(Complex, Complex)
#2
去看《C++ Primer》在讲解了自定义类型转换后,重总结重载判决规则的章节,一条条对,你就会发现原因了。
#3
因为你定义了一个
operator double();
同时又有一个单参的构造函数:
Complex(double r);
所以编译
c3=c1+2.5;
时, 编译器不知道是通过构造函数Complex(double r)将2.5转换为Complex好呢,
还是通过operator double()将c1转换为double好呢.
所以去掉operator double()就可以了.
operator double();
同时又有一个单参的构造函数:
Complex(double r);
所以编译
c3=c1+2.5;
时, 编译器不知道是通过构造函数Complex(double r)将2.5转换为Complex好呢,
还是通过operator double()将c1转换为double好呢.
所以去掉operator double()就可以了.
#4
operator double(){cout < <return real;}
没见过。。。
谁能解释一下。。。或给个链接
如果太简单。。。那就当什么也没发生
没见过。。。
谁能解释一下。。。或给个链接
如果太简单。。。那就当什么也没发生
#5
是一种 定义隐藏的 转换??把 double 转换成 complex ??
那把 Complex(double r){real=r;imag=0;} 去了。。 是不是也正确??
那把 Complex(double r){real=r;imag=0;} 去了。。 是不是也正确??
#6
但是赋值就不正确了,一个double赋给一个Complex
#7
呵呵 很明显!~
#8
因为你没有定义Complex(int,int){}
#9
C/C++ codec3=c1+Complex(2.5);
operator double(){return real;}
friend Complex operator + (Complex c1,Complex c2);
c.c:24: note: candidates are: operator+(double, double) <built-in>
c.c:17: note: Complex operator+(Complex, Complex)
这些都是什么意思?
看不懂,望指教....
operator double(){return real;}
friend Complex operator + (Complex c1,Complex c2);
c.c:24: note: candidates are: operator+(double, double) <built-in>
c.c:17: note: Complex operator+(Complex, Complex)
这些都是什么意思?
看不懂,望指教....