2013-12-12 47 views
0

我對C++超級新手。我需要編寫一個使用list的鏈接列表類。我大部分的方式,但我需要一個[]運算符返回列表中的第n個元素。我在大多數情況下都可以工作,但在我的測試驅動程序中,我需要比較不同列表中的兩個元素。 (即,例如,l1[n]==l2[m])。這提供了以下編譯錯誤:列表的迭代器是否可以返回一個非const引用?

error: passing ‘const StrList {aka const TList<std::basic_string<char> >}’ as ‘this’ argument of ‘T& TList<T>::operator[](int) [with T = std::basic_string<char>]’ discards qualifiers [-fpermissive] 

我認爲這裏的問題是,從[]操作迭代我回電話返回一個const引用。 (從[]操作返回調用return(*iter);,其中*iter指的是正確的元素。

有沒有辦法返回參考迭代器作爲一個非const引用,或者是有一些其他的方式,我應該?要對這個我可以,如果有必要發佈更多的代碼

+0

對不起@Yuushi,我不要以爲我明白,你能否詳細說一下? –

+0

不管'TList'你試圖從一個非const元素引用被標記爲'const'。這種語言不會讓你從常量中獲得非常量的東西,而沒有明確的轉換,並且有很好的理由。如果我有一個常量,我希望它不會改變。 – chris

+0

我沒有清楚地讀到錯誤。問題可能與您所描述的相反:您正在返回一個非const引用,但您需要一個const引用。 – Yuushi

回答

4

這是略硬說沒有代碼,但考慮到錯誤,你可能需要一個const超載operator[]

template <typename T> 
const T& operator[](std::size_t n) const 
{ 
    ... 
} 
+0

太棒了!正是我需要的! –

相關問題