class DList{
struct Node{
T data_;
Node* next_;
Node* prev_;
Node(const T& data=T{},Node* next=nullptr, Node* prev=nullptr){
data_=data;
next_=next;
prev_=prev;
}
};
Node* front_;
Node* back_;
public:
DList(){
front_=nullptr;
back_=nullptr;
}
void push_front(const T& data);
~DList();
class const_iterator{
friend class DList;
DList* myList_;
Node* curr_;
const_iterator(Node* curr, DList* theList){
curr_ = curr;
myList_ = theList;
}
public:
const_iterator(){
myList_ = nullptr;
curr_ = nullptr;
}
const_iterator operator++(){}
const_iterator operator++(int){}
const_iterator operator--(){}
const_iterator operator--(int){}
bool operator==(const_iterator rhs){}
bool operator!=(const_iterator rhs){}
const T& operator*()const{}
};
class iterator:public const_iterator{
friend class DList;
iterator(Node* curr, DList* theList):const_iterator(curr,theList){}
public:
iterator():const_iterator(){}
iterator operator++(){}
iterator operator++(int){}
iterator operator--(){}
iterator operator--(int){}
T& operator*(){}
const T& operator*()const{}
};
const_iterator cbegin() const {
return const_iterator(front_,this);
}
iterator begin(){
return iterator(front_,this);
}
const_iterator cend() const{
return const_iterator(nullptr,this);
}
iterator end(){
return iterator(nullptr,this);
}
};
这是我的任务,也是链表的代码,我的任务是为链表实现迭代器类,我刚刚实现了begin和end函数,当我运行测试器检查那些函数是否起作用时,我得到了返回const_iterator对象时,在这些行下出现错误“从'const DList * const'到'DList *'[-fpermissive]的无效转换”。
const_iterator cbegin() const {
return const_iterator(front_,this);
}
const_iterator cend() const{
return const_iterator(nullptr,this);
}
我对此错误消息进行了一些研究,但是没有答案可以帮助我了解问题所在。我不知道为什么会给我这个错误,希望能得到帮助和澄清。
const_iterator(Node* curr, DList* theList)
接受一个非const
DList *
,但它被称为
return const_iterator(front_, this);
来自const
方法
const_iterator cbegin() const
this
方法中的const
是const
,因此此处this
是const DList *
,不能用作期望非const
DList *
的参数的参数。
简单的解决方法是替换
const_iterator(Node* curr, DList* theList)
{
curr_ = curr;
myList_ = theList;
}
与
const_iterator(Node* curr, const DList* theList):
curr_(curr),
myList_ (theList) // using member initializer list for reasons of taste
{
}
并且如果可能,请始终遵循const
正确性。例如,成员
DList* myList_;
必须成为
const DList* myList_;
或您刚刚移动了错误消息。问题中当前尚未完全实现的其他成员函数可能需要修改。
在我看来,这应该是可能的。