逗× 2021-12-15 04:15 采纳率: 0%
浏览 35

c++等号重载问题迭代时报错

#include<iostream>
#include<cctype>
#include<cstdlib>
#include<vector>
#include<list>
#include<string>
#include<algorithm>

using namespace std;


class Variable
{
public:
    Variable()
    {
    }
    Variable(char c, int i)
    {
        id = c;
        exp = i;
    }
    bool operator==(const Variable& v)const
    {
        return id == v.id && exp == v.exp;
    }
    bool operator<(const Variable& v)const
    {
        return id < v.id;
    }
    char id;
    int exp;
};

class Term
{
public:
    Term()
    {
        coeff = 0;
    }
    int coeff;
    vector<Variable>vars;
    bool operator==(const Term&)const;
    bool operator!=(const Term& term)const
    {
        return !(*this == term);
    }
    bool operator<(const  Term&)const;
    bool operator>(const Term& term)const
    {
        return *this != term && (*this < term);
    }
    int min(int n, int m)const
    {
        return (n < m) ? n : m;
    }
};

class Polynomial
{
public:
    Polynomial()
    {

    }
    Polynomial operator+( Polynomial&)const;
    void error(char* s)
    {
        cerr << s << endl;
        exit(1);
    }
private:
    list<Term>terms;
    friend istream& operator>>(istream&, Polynomial&);
    friend ostream& operator<<(ostream&,  const Polynomial&);
};

bool Term::operator==(const Term& term)const
{
    int i = 0;
    for (int i = 0; i < min(vars.size(), term.vars.size()) && vars[i] == term.vars[i]; i++);
    return  i == vars.size() && vars.size() == term.vars.size();
}

bool Term::operator<(const Term& term2)const
{
    if (vars.size() == 0)
        return false;
    else if (term2.vars.size() == 0)
        return true;
    for (int i = 0; i < min(vars.size(), term2.vars.size()); i++)
        if (vars[i].id < term2.vars[i].id)
            return true;
        else if (term2.vars[i].id < vars[i].id)
            return false;
        else if (vars[i].exp < term2.vars[i].exp)
            return true;
        else if (term2.vars[i].exp < vars[i].exp)
            return false;
    return ((int)vars.size() - (int)term2.vars.size() < 0) ? true : false;
}

Polynomial Polynomial::operator+( Polynomial& polyn2)const
{
    Polynomial result;
    list<Term>::iterator p1, p2;
    bool erased;
    
        for (p1 = terms.begin(); p1 != terms.end(); p1++)
        result.terms.push_back(*p1);
    for (p1 = polyn2.terms.begin(); p1 != polyn2.terms.end(); p1++)
        result.terms.push_back(*p1);
    for (p1 = result.terms.begin(); p1 != result.terms.end();)
    {
        for (p2 = p1, p2++, erased = false; p2 != result.terms.end(); p2++)
            if (*p1 == *p2)
            {
                p1->coeff += p2->coeff;
                result.terms.erase(p2);
                if (p1->coeff == 0)
                    result.terms.erase(p1);
                erased = true;
            }
        if (erased)
            p1 = result.terms.begin();
        else p1++;
    }
    result.terms.sort();
    return result;
}


for (p1 = terms.begin(); p1 != terms.end(); p1++)

报错信息

E0349    没有与这些操作数匹配的 "=" 运算符    
C2679    二元“=”: 没有找到接受“std::_List_const_iterator<std::_List_val<std::_List_simple_types<_Ty>>>”类型的右操作数的运算符(或没有可接受的转换)    

等号报错,怎么改?求指教

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-12-15 08:35
    关注

    你只重载了==操作符,没有重载=操作符啊。你得写一个才行

    评论

报告相同问题?

问题事件

  • 创建了问题 12月15日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境