我是C ++的新手。我需要编写一个使用list
的Linked List类。我大部分时间都在这里,但是我需要一个[]
运算符来返回列表中的第n个元素。我在大多数情况下使用它,但在我的测试驱动程序中,我需要比较来自不同列表的两个元素。 (即l1[n]==l2[m]
)。这给出了以下编译错误:
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 :(得分:4)
没有代码就很难分辨,但鉴于错误,您可能需要const
重载operator[]
:
template <typename T>
const T& operator[](std::size_t n) const
{
...
}