“运算符”的C模糊过载
发布时间:2020-12-16 10:44:01 所属栏目:百科 来源:网络整理
导读:我在这里读了几篇关于这种错误的帖子,但我无法解决这个问题…… 我很快就定义了运算符int和函数f,无法编译. 我测试了几件事我无法解决问题…. 谢谢 ex1.cpp: In function ‘int main(int,char**)’:ex1.cpp:35:13: error: ambiguous overload for ‘operator
我在这里读了几篇关于这种错误的帖子,但我无法解决这个问题……
我很快就定义了运算符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,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进行隐式转换;所以4可以是 int(a) + 4 要么 a + Fraccao(4) 没有理由选择一个而不是另一个.要解决歧义,您可以: >如上所述,明确转换;要么>声明构造函数或转换运算符(甚至两者)是显式的,这样只能隐式地进行一次(甚至两次)转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |