0

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

operator.cpp:在函数'int main()'中:
operators.cpp:23:17:错误:无法在初始化中将'Operators'转换为'int'

这是我的代码:

#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.
但现在我收到以下错误:

运营商.cpp:在函数'int main()'中:
运营商.cpp:25:10:错误:匹配'std :: cout << res'<br>中的'operator <<' [...]

4

5 回答 5

4

这条线的问题:

int res = o1 + o2;

是不是你的重载operator +返回了一个类型的对象Operators。这意味着您正在尝试从临时类型( 的结果)初始化int( ,但是没有用户定义的转换可以做到这一点。res)Operatorso1 + o2

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

operator int () const { return num1; }

更新:

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

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

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

要解决此问题,您可以:

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

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

这是一个活生生的例子

于 2013-04-21T17:01:59.487 回答
3

正如错误消息试图告诉您的那样,o1 + o2类型为Operators.
您不能将其分配给int

于 2013-04-21T17:02:07.130 回答
1

operator+返回一个Operators对象。然后,您尝试将此结果分配给int res. 您没有提供将Operators对象转换为int. 您可以提供一个转换运算符来执行此操作:

operator int() {
  return num1;
}

这定义了从Operators到的转换int

于 2013-04-21T17:02:17.847 回答
0

更改intOperators并实现您自己的副本和默认构造函数。

#include <iostream>

class Operators
{
    private:
        int num1;

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

int main()
{
    Operators o1(5);
    Operators o2(10), res;

    res = o1 + o2;

    std::cout << res;
}

为了使这项工作更进一步,创建一个重载operator<<并打印总和。

于 2013-04-21T17:03:38.197 回答
0

你需要写:

int res = o1.getMethod() + o2.getMethod();

其中 getMethod() 是类中的一个公共方法,它返回私有整数 num1。否则,您无权访问它。尝试一下。

于 2013-04-21T17:09:32.400 回答