[英]pointer conversion error c++
我寫了一個簡單的list
類,一部分看起來是這樣的:當我嘗試構建項目時,編譯器顯示3個錯誤,其中一個是指針轉換問題,我無法理解為什么:
編譯器錯誤說:
- 'MyList :: Node * MyList :: begin(void)':無法將'this'指針從'const MyList'轉換為'MyList&'
- 'MyList :: Node * MyList :: end(void)':無法將'this'指針從'const MyList'轉換為'MyList&'
- '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的begin
和end
。 要么改變
MyList<T> & MyList<T>::operator=(const MyList& rhs)
至
MyList<T> & MyList<T>::operator=(MyList& rhs)
或使const對象的begin
和end
工作。 即node_iterator begin() const { return first; }
node_iterator begin() const { return first; }
解決此問題,然后對其他任何編譯器錯誤/警告進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.