指针转换错误C

pointer conversion error c++

本文关键字:错误 转换 指针      更新时间:2023-10-16

我写了一个简单的 list类,其中的一部分看起来像:当我尝试构建该项目时,编译器显示了其中一个错误的3个错误,我无法理解为什么:

编译器错误说:

  1. 'myList :: node *mylist :: begin(void)':无法将" const mylist"转换为" myList"&'
  2. 'mylist :: node *mylist :: end(void)':无法将" const mylist"转换为" myList"&'
  3. 'myList :: create':没有超载函数为1个参数

类(只有很少的部分..)

template<class T>
class MyList
{   
public:
    typedef T* iterator;
    typedef const T* const_iterator;
    typedef T value_type;
    typedef T& reference;
    typedef const T& const_reference;
    struct Node
    {
        T data;
        Node* prev;
        Node* next;
    };
    typedef Node* node_iterator;

    node_iterator begin() { return first; }
    node_iterator end() { return last; }
    ...
    MyList() { create(); }//default constructor
    MyList(size_type n, const T& val = T()){create(n, val);}
    MyList(const MyList& l) { create(l.begin(), l.end()); }//copy constructor
    MyList& operator=(const MyList&);//assignment operator
    ~MyList() { uncreate(); }
private:
    node_iterator first;
    node_iterator last;
    ...
    ...
};
MyList<T> & MyList<T>::operator=(const MyList& rhs)
{
    if (&rhs != this)
    {
        uncreate();
        create(rhs.begin(), rhs.end());
    }
    return *this;
}
template<class T>
void MyList<T>::create(node_iterator a, node_iterator b)
{
    ...
}

您正在调用

create(rhs.begin(), rhs.end());

其中 rhs是const对象。但是您调用需要对象不为const的beginend。要么更改

 MyList<T> & MyList<T>::operator=(const MyList& rhs)

to

 MyList<T> & MyList<T>::operator=(MyList& rhs)

或使beginend适用于const对象。即node_iterator begin() const { return first; }

修复此操作,然后在任何其他编译器错误/警告上使用。