c++ - 'const DList 的无效转换* const' 到 'DList*' [-fpermissive] 返回对象时
问题描述
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);
}
};
这是我的任务和链表的代码,我的任务是实现链表的迭代器类,我刚刚实现了开始和结束函数,当我运行测试器检查这些函数是否工作时,我得到了错误在返回 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
中的是,所以这里是 a并且不能用作期望非 的参数的参数。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_;
或者您刚刚移动了错误消息。问题中当前未完全实现的其他成员函数可能需要进行修改。
在我看来这应该是可能的。
推荐阅读
- c# - C# 变量 Excel 文件输出循环
- android - 为什么私有集不适用于 MutableLiveData?
- javascript - 相同的对象被推入 arrayList
- python - 在python中合并列表?
- javascript - Javascript:用替换字符串中的空格的魔法
- sql - 如何减少sql查询的执行时间?
- mvc-mini-profiler - Mini Profiler 的 Profiling 结果会话列表
- python - 在 CS231n 中,one_loop 比 k-nearest 方法中的 two_loop 慢
- java - 在我周围 5 公里半径值范围内的 android 应用上标记地理位置。
- angular - 我应该只将 Ionic 用于 Web 应用程序吗?