我有一个转换类 konw -> int, double -> konw:
class konw {
double re, im;
public:
konw() : re(0.0), im(0.0) {}
konw(double r, double i = 0.0) : re(r), im(i) {}
operator int() {return re;}
konw operator+(konw a) {konw wynik; wynik.re = re + a.re; wynik.im = im + a.im; return wynik;}
};
在 main 中,我使用重载的 operator+ 测试这些转换
konw zesp(3.1, 0.6);
int ssuma = zesp + 6;
编译器在处理最后附加的行时声明了一个错误,说:
ambiguous overload for 'operator+' in 'zesp + 6'
据我所知,如果有几种方法可以调用重载函数,编译器会选择最短的一种。当然,应该只有一种方式。我可以找到两种调用 operator+ 的方法:
- 转换变量
zesp
konw -> int 和调用operator+(int, int)
- 转换常量
6
int->double->konw 和调用konw::operator+(konw)
第一种方法比第二种方法快,所以编译器应该选择它并执行,但它说明了一个关于模糊重载的错误。为什么?我的思考过程中哪里出了问题?