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

问题描述 投票:0回答:1
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);
}

我对此错误消息进行了一些研究,但是没有答案可以帮助我了解问题所在。我不知道为什么会给我这个错误,希望能得到帮助和澄清。

c++ type-conversion const
1个回答
1
投票
const_iterator(Node* curr, DList* theList)

接受一个非const DList *,但它被称为

    return const_iterator(front_, this);

来自const方法

const_iterator cbegin() const

this方法中的constconst,因此此处thisconst 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_;

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

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

© www.soinside.com 2019 - 2024. All rights reserved.