2014-11-24 67 views
0

我有一个包含重载几个操作员功能操作员常迭代

self_reference operator=(const SDAL_Const_Iter& src) { 
    index = src.index; 
    return *this; 
} 

self_reference operator++() { 
    index = index + 1; 
    return *this; 
} 

self_type operator++(int) { 
    SDAL_Const_Iter results = *this; 
    ++index; 
    return results; 
} 

index变量是const int类型的以下方法的恒定iterator类重载。

我的编译器抱怨说我正在尝试修改一个常量对象(更具体地说,“错误C2166:l值指定常量对象”),我知道它;然而,我没有看到重载这些函数的其他方式。有人可以详细说明如何去写这些重载而不会导致编译器问题吗?

+0

你为什么要做'index''const'? – 0x499602D2 2014-11-24 23:22:53

+2

我相信'++ * index'中的代码有一个错字 - int没有一个*。为什么索引是一个const int?常量迭代器不应该允许非const访问容器的数据。但是迭代器本身是可变的(它必须能够迭代)。 – 2014-11-24 23:22:54

+0

我现在可以看到这个错误,我从我之前写过的迭代器中复制了这段代码,它迭代了一个链表而不是一个数组。我将索引类型更改为“int”,并解决了错误 – Kevin 2014-11-24 23:33:47

回答

1

我相信问题在于const intindex变量。

一个常量迭代器不应该允许非const访问容器的数据。但是迭代器本身是可变的(它必须能够迭代)。将index更改为int可以解决问题。