gpt4 book ai didi

c++ - 返回对象时从 'const DList* const' 到 'DList*' [-fpermissive] 的无效转换

转载 作者:行者123 更新时间:2023-11-28 04:08:47 24 4
gpt4 key购买 nike

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

const方法中的thisconst,所以这里的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 的正确性。例如成员(member)

DList* myList_;

必须成为

const DList* myList_;

或者您刚刚移动了错误消息。问题中当前未完全实现的其他成员函数可能需要修改。

在我看来这应该是可能的。

关于c++ - 返回对象时从 'const DList<int>* const' 到 'DList<int>*' [-fpermissive] 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58244208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com