指针转换错误c ++

时间:2017-12-25 08:40:04

标签: c++ pointers

我写了一个简单的list类,其中部分内容如下: 当我尝试构建项目时,编译器显示3个错误,其中一个是指针转换问题,我不知道为什么:

编译错误说:

  
      
  1. 'MyList :: Node * MyList :: begin(void)':无法将'this'指针从'const MyList'转换为'MyList&'
  2.   
  3. 'MyList :: Node * MyList :: end(void)':无法将'this'指针从'const MyList'转换为'MyList&'
  4.   
  5. 'MyList :: create':没有重载函数需要1个参数
  6.   

班级(只有一小部分......)

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)
{
    ...
}

1 个答案:

答案 0 :(得分:2)

您正在致电

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

其中rhs是一个const对象。但是你要求beginend要求对象不是const。要么改变

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

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

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

修复此问题然后处理任何其他编译器错误/警告。