//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上运行,然后运行良好。
我知道将数据公开是一个坏习惯,但现在我只想知道它为什么会抛出这个错误。我在网上搜索了很长时间。但没用。请帮助或尝试提供一些如何实现这一点的想法。
提前致谢。
答案 0 :(得分:3)
问题是OnPropertyChanged
是一个const引用,它使other
const也是如此,因此只有返回const迭代器的std::map::begin()
版本可用,但是你尝试将它分配给常规迭代器。修复可能是更改迭代器类型:
other.monomial
但您最好使用 map<int, double>::const_iterator iter;
代替甚至更好地使用范围循环:
auto
然而,目前尚不清楚为什么你需要手动实现copy ctor,生成的编译器将毫不费力地完成所需的工作。