Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载运算符+的问题;_C++_Operator Overloading - Fatal编程技术网

C++ 重载运算符+的问题;

C++ 重载运算符+的问题;,c++,operator-overloading,C++,Operator Overloading,我正试图写一个程序,它最终将能够计算+,-,*,/,解,(等)多项式。我将从一个简单的例子开始,尝试添加两个单项式,并将在此基础上慢慢扩展。我正在尝试重载+运算符,但我不断收到错误: 错误“m1+m2”中的“运算符+”不匹配 大体上我这样称呼它: Monomial m1(2,3); Monomial m2(3,3); Monomial result; result = m1 + m2; // I get an error when trying to do this. 在多项式类标题中,我将其

我正试图写一个程序,它最终将能够计算+,-,*,/,解,(等)多项式。我将从一个简单的例子开始,尝试添加两个单项式,并将在此基础上慢慢扩展。我正在尝试重载+运算符,但我不断收到错误:

错误“m1+m2”中的“运算符+”不匹配

大体上我这样称呼它:

Monomial m1(2,3);
Monomial m2(3,3);
Monomial result;
result = m1 + m2; // I get an error when trying to do this.
在多项式类标题中,我将其定义为:

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,但我得到了一个错误。不要担心打印出我算出的结果部分。

假设
多项式
单项式
没有真正的关系,尝试以下方法:

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

首先,可能是您的
运算符+
应该返回一个
单项式

<>但是你的问题与C++的范围有关。 friend prototype声明的范围是
单项式
类, 当您编写以下内容时,编译器无法使用:

result = m1 + m2;
在语句之前,您需要运算符+()的原型才能在该范围内可见。
因此,您必须复制该原型并在之前声明它(或者让实现在之前出现)

你能发布完整的错误信息吗?它通常包含对期望值的提示以及紧密匹配。此外,
多项式
单项式
是如何关联的?(当您尝试使用
多项式
类型分配
单项式
变量时。)您甚至包括了
多项式
类头文件吗?当运算符+成员返回多项式时,为什么结果是单项式的?多项式是单项式的派生类吗?你能告诉我们你的头文件是如何排列的吗?我以前试过,现在又试了一次,但它仍然给我同样的错误。等等,我只是试着把函数从单项式类移到多项式类,但这并没有解决问题。然而,当我将实现移到main之上时,它工作得很好。为什么呢?为什么我不能在其中一个类中实现它?我的实现或声明/定义错误吗?C++编译器从上到下解析程序,因此如果在使用函数之前没有声明操作符,它就不知道有单体的运算符+。