C++ 重载运算符+的问题;
我正试图写一个程序,它最终将能够计算+,-,*,/,解,(等)多项式。我将从一个简单的例子开始,尝试添加两个单项式,并将在此基础上慢慢扩展。我正在尝试重载+运算符,但我不断收到错误: 错误“m1+m2”中的“运算符+”不匹配 大体上我这样称呼它: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. 在多项式类标题中,我将其
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++编译器从上到下解析程序,因此如果在使用函数之前没有声明操作符,它就不知道有单体的运算符+。