我仍然试图实现我自己版本的LinkedList类,现在我对常量迭代器的重载方法有问题。例如,当我尝试使用此代码打印出清单:C++:为常量迭代器重载list.end()和list.begin()方法
cout << "citer:" << endl;
for (UberList<int>::CIter it = ulist.begin(); it != ulist.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
我有这些错误:
Error E2034 UberList2.cpp 532: Cannot convert 'UberList<int>::Iter' to 'UberList<int>::CIter' in function main()
Error E2094 UberList2.cpp 532: 'operator!=' not implemented in type 'UberList<int>::CIter' for arguments of type 'UberList<int>::Iter' in function main()
所以据我的理解,这意味着那些平常结束,并开始迭代方法被使用。下面是这些方法是如何在我的类中声明:
Iter begin();
Iter end();
CIter begin() const;
CIter end() const;
和
template<class T>
typename UberList<T>::Iter UberList<T>::begin()
{
Iter it;
it.curr = head;
return it;
}
template<class T>
typename UberList<T>::Iter UberList<T>::end()
{
Iter it;
it.curr = tail->next;
return it;
}
template<class T>
typename UberList<T>::CIter UberList<T>::begin() const
{
CIter it;
it.ccurr = head;
return it;
}
template<class T>
typename UberList<T>::CIter UberList<T>::end() const
{
CIter it;
it.ccurr = tail->next;
return it;
}
有什么办法,我可以强迫我的程序使用的常量迭代器,而不是常使用的这些常量的方法呢?我很乐意听到任何建议。
哦,这是我在一个文件类的代码,以防万一:http://pastebin.com/Jbvv5Hht
您的代码看起来不错,我已经添加在引擎收录运营商有些“consts”。可能不会帮助,但代码看起来OK – Drakosha 2010-12-18 12:35:42
谢谢你,但我仍然得到这些错误=( – Chris 2010-12-18 12:47:01