重载operator +的问题

时间:2013-11-08 06:02:22

标签: c++ operator-overloading

我正在尝试编写一个程序,最终能够实现+, - ,*,/,求解,(等)多项式。我从一个简单的例子开始尝试添加两个单项式,并将慢慢建立它。我正在尝试重载+运算符,但我一直收到错误:

  

错误与'm1 + m2'中的'operator +'不匹配

主要是我这样称呼:

Monomial m1(2,3);
Monomial m2(3,3);
Monomial result;
result = m1 + m2; // I get an error when trying to do this.

在我的Polynomial类标题中,我把它定义为:

friend Polynomial operator+ (const Monomial&, const Monomial&); 

我实施的方式是:

Polynomial operator+(const Monomial& mono1, const Monomial& mono2){
    Polynomial poly;
    poly.coef = mono1.coef + mono2.coef;  // coef stands for coefficient
    poly.exp = mono1.exp;                 // exp stands for exponent
    return poly;
}

*注意我只是在我深入研究不同指数等的实际情况之前,首先尝试运算符+工作。这只是一个简单案例的准分子。 我传入的是m1(2,3),即2x ^ 3,m2(3,3)是3x ^ 3,它应该清楚地等于5x ^ 3,但是我得到一个错误。不要担心打印出来的结果部分。

2 个答案:

答案 0 :(得分:0)

假设PolynormialMonomial没有真正的关系,请尝试以下方法:

Monomial m1(2,3);
Monomial m2(3,3);
Polynomial result;
result = m1 + m2;

答案 1 :(得分:0)

首先,您的operator+可能会返回Monomial

但是你的问题与C ++范围有关。 朋友原型声明的范围是Monomial类, 当你后者写的时候编译器不能使用它:

result = m1 + m2;

在语句之前,您需要在该范围内显示operator +()的原型。 因此,您必须复制该原型并在之前声明它(或之前出现实现)。