我为什么没有匹配运算符>>的原因?

时间:2019-04-18 06:12:54

标签: c++

我正在研究多项式的重载运算符。我正在使用>>运算符,但是在编译代码时出现错误。它告诉我没有匹配的运算符>>。我相信这与我在代码中使用的p1.degree有关,但我不确定。

我正在遵循我的书中有关运算符重载的示例。当我重载<<操作符p1.degree工作。现在我静止不动。

班级

class Polynomial
{
private:
int degree;     // Degree of the poly nomial
int coef[9];        // Array of coefficients

public: 
Polynomial();   // Cunstructor
void get_poly();
void display_poly();
void Add_2_Polynomials(Polynomial, Polynomial);

Polynomial operator + (const Polynomial &); // overloaded + operator
Polynomial operator - (const Polynomial &); // overloaded - operator
Polynomial operator * (const Polynomial &); // overloaded * operator
//friends
friend ostream &operator << (ostream &, const Polynomial &);    // Overloaded << operator
friend istream &operator >> (istream &, const Polynomial &);    // Overloaded >> operator


};

重载>>运算符

istream &operator >> (istream &strm, const Polynomial &p1)
{
cout << "Enter degree of polynomial: ";
strm >> p1.degree;

cout << "Enter the " << p1.degree+1 << "coeficients: ";

for (int i = p1.degree; i >=0; i--)
    strm >> p1.coef[i];
}

我希望代码可以编译,以便可以使用>>获取我的多项式信息。

1 个答案:

答案 0 :(得分:0)

使p1为非常量,以便您可以修改以下值:

istream &operator >> (istream &strm, Polynomial &p1)

在声明中执行相同的操作:

friend istream &operator >> (istream &, Polynomial &);

istream &operator >>的末尾,返回对流的引用:

return strm;

附带说明(可能只是提供的示例),其中有未实现的功能。该代码不会与未实现的Polynomial()构造函数链接,您可以删除该声明或将其更改为Polynomial(){}