gpt4 book ai didi

c++ - 重载 "+"- 运算符

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:32 26 4
gpt4 key购买 nike

我试图在 C++ 中重载 + 运算符,但出现以下错误:

operators.cpp: In function ‘int main()’:
operators.cpp: 23:17: error: cannot convert ‘Operators’ to ‘int’ in initialization

这是我的代码:

#include <iostream>
using namespace std;

class Operators{
private:
int num1;

public:
Operators(int num1){
this->num1 = num1;
}
Operators operator+(Operators o){
return Operators(num1 + o.num1);
}
};

int main(){
Operators o1(5);
Operators o2(10);
Operators res = o1 + o2; // EDITED

cout << res;
}

你能帮帮我吗?

我知道,在这种情况下重载它没有意义,因为我可以说 5+10,但我只是在试验。

更新谢谢,我已经编辑了 int
但是现在我收到以下错误:

operators.cpp: In function ‘int main()’:
operators.cpp: 25:10: error: match for ‘operator<<’ in ‘std::cout << res’
[...]

最佳答案

这一行的问题:

int res = o1 + o2;

这是您对 operator + 的重载吗?返回 Operators 类型的对象.这意味着您正在尝试初始化一个 int ( res) 来自 Operators 类型的临时值(o1 + o2 的结果)),但没有用户定义的转换。

这就是编译器发出错误的原因。您可以通过向 Operators 添加转换运算符来轻松解决此问题类:

operator int () const { return num1; }

更新:

看来您已经更新了您的问题。下面第二行有问题:

Operators res = o1 + o2;
cout << res;

除非您定义了 operator << 的重载为你的Operators类,编译器将不知道 operator << 的哪个重载选择流式传输您的对象类型 Operators .

要解决这个问题,您可以:

  • 定义一个转换运算符为int , 如上所述
  • 定义 operator << 的重载对于 Operators ,如下:

    friend std::ostream& operator << (std::ostream& o, Operators const& op)
    {
    o << op.num1;
    return o;
    }

这是一个live example .

关于c++ - 重载 "+"- 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16133771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com