簡體   English   中英

指針轉換錯誤C ++

[英]pointer conversion error c++

我寫了一個簡單的list類,一部分看起來是這樣的:當我嘗試構建項目時,編譯器顯示3個錯誤,其中一個是指針轉換問題,我無法理解為什么:

編譯器錯誤說:

  1. 'MyList :: Node * MyList :: begin(void)':無法將'this'指針從'const MyList'轉換為'MyList&'
  2. 'MyList :: Node * MyList :: end(void)':無法將'this'指針從'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)

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

或使const對象的beginend工作。 node_iterator begin() const { return first; } node_iterator begin() const { return first; }

解決此問題,然后對其他任何編譯器錯誤/警告進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM