我在这里阅读了几篇关于此类错误的文章,但我无法解决这个问题......
很快我定义了运算符 int 和函数 f,无法编译。
我测试了几件事,但无法解决问题......
谢谢
ex1.cpp: In function ‘int main(int, char**)’:
ex1.cpp:35:13: error: ambiguous overload for ‘operator+’ in ‘a + 4’
ex1.cpp:35:13: note: candidates are:
ex1.cpp:35:13: note: operator+(int, int) <built-in>
In file included from ex1.cpp:3:0:
Fraccao.h:41:9: note: Fraccao operator+(const Fraccao&, const Fraccao&)
ex1.cpp:38:13: error: ambiguous overload for ‘operator+’ in ‘4 + a’
ex1.cpp:38:13: note: candidates are:
ex1.cpp:38:13: note: operator+(int, int) <built-in>
In file included from ex1.cpp:3:0:
Fraccao.h:41:9: note: Fraccao operator+(const Fraccao&, const Fraccao&)
班上:
class Fraccao {
int numerador;
int denominador;
public:
Fraccao(int num = 0, int deno = 1) : numerador(num), denominador(deno) {}
Fraccao & operator+=(const Fraccao &fra);
Fraccao & operator*=(const Fraccao &fra);
operator int() const;
const Fraccao & operator++();
const Fraccao operator++(int);
string getAsString() const;
};
Fraccao operator +(const Fraccao &a, const Fraccao &b);
ostream & operator<<(ostream & saida, const Fraccao & fra);
在我的主要内容上:
void func(int n) {
cout << n; //
}
int main(int argc, char** argv) {
//...
d = a + b;
const Fraccao h(7, 3);
func(h);
return 0;
}
您似乎没有发布实际导致错误的代码。我想它看起来像
Fraccao a;
Fraccao b = a + 4;
Fraccao c = 4 + a;
问题是你的类允许隐式转换int
; so a + 4
可能是
int(a) + 4
or
a + Fraccao(4)
没有理由选择其中之一。要解决歧义,您可以:
- 使转换显式化,如上所述;或者
- 声明构造函数或转换运算符(或什至两者都声明)
explicit
因此只能隐式进行一次(甚至都不进行)转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)