2014-11-24 63 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可以解決問題。