错误:'operator ='不匹配(操作数类型为'std :: map <int,double =“”> :: iterator

时间:2018-04-07 14:00:14

标签: c++ class iterator copy-constructor

     //a class used to make operations on Polynominal   
    class Polynominal
        {
        public:
            map<int, double> monomial;//int is exp,double is coefficient
            Polynominal();
            ~Polynominal();
            Polynominal(const Polynominal& other);
            /*...many functions*/
        };

        //copy constructor
        Polynominal::Polynominal(const Polynominal& other)
        {
            map<int, double>::iterator iter;

        /*Throw error here. If I replace it with 
           "map<int, double>tem=other.monomial;" 
           and then operate on tem, then it run well.*/
          for(iter=other.monomial.begin();iter!=other.monomial.end();iter++)
              monomial.insert(pair<int, double>(iter->first, iter->second));
        }

在使用迭代器的过程中,它会抛出错误。如果我用
替换它 map<int, double>tem=other.monomial;然后在tem上运行,然后运行良好。   我知道将数据公开是一个坏习惯,但现在我只想知道它为什么会抛出这个错误。我在网上搜索了很长时间。但没用。请帮助或尝试提供一些如何实现这一点的想法。 提前致谢。

1 个答案:

答案 0 :(得分:3)

问题是OnPropertyChanged是一个const引用,它使other const也是如此,因此只有返回const迭代器的std::map::begin()版本可用,但是你尝试将它分配给常规迭代器。修复可能是更改迭代器类型:

other.monomial

但您最好使用 map<int, double>::const_iterator iter; 代替甚至更好地使用范围循环:

auto

然而,目前尚不清楚为什么你需要手动实现copy ctor,生成的编译器将毫不费力地完成所需的工作。