加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

“运算符”的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)

没有理由选择一个而不是另一个.要解决歧义,您可以:

>如上所述,明确转换;要么>声明构造函数或转换运算符(甚至两者)是显式的,这样只能隐式地进行一次(甚至两次)转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读