运算符重载问题C++

Operator overloading problems C++

本文关键字:C++ 问题 重载 运算符      更新时间:2023-10-16

我有一个多项式类,并且重载了+、-和*运算符,以及<lt;操作人员这一切似乎都很好,直到我尝试输出一个表达式,比如poly1+poly2,而不仅仅是一个多项式对象。

这是我的附加操作员代码:

Polynomial operator+ (const Polynomial& poly1, const Polynomial& poly2){
    vector<int> final_coeffs;
    if (poly1.Degree()>poly2.Degree())
    {
        for (int i=0; i<=poly2.Degree(); i++)
            final_coeffs.push_back(poly2.Coefficient(i) + poly1.Coefficient(i));
        for (int i=poly2.Degree()+1; i<=poly1.Degree(); i++)
            final_coeffs.push_back(poly1.Coefficient(i));
    }
    else
    {
        for (int i=0; i<=poly1.Degree(); i++)
            final_coeffs.push_back(poly1.Coefficient(i) + poly2.Coefficient(i));
        for (int i=poly1.Degree()+1; i<=poly2.Degree(); i++)
            final_coeffs.push_back(poly2.Coefficient(i));
    }
    return Polynomial(final_coeffs);
}

这是我的<lt;操作员代码(我已经有一个正确工作的打印成员功能):

ostream& operator<< (ostream& out, Polynomial& poly){
    poly.print();
    return out;
}

当我主要尝试这样做时,问题就出现了:

cout << poly1+poly2;

但如果我只是这样做,效果很好:

cout << poly1;

错误消息显示:二进制表达式('ofstream'(又名'basic_ofstream')和('Polynomial')的操作数无效

对于特定的函数,它应该使用:候选函数不可行:第二个参数需要一个l值

谢谢!

您需要:

ostream& operator<< (ostream& out, Polynomial const& poly) {

这是因为临时对象不能绑定到非常量引用。

请注意,这意味着您还必须使Polynomial::print()函数为const