2012-03-13 33 views
2

我試圖創建一個雙向鏈表,我得到這個錯誤:錯誤C2440:「=」:無法從「ListNode <T> *」轉換爲「ListNode <T> *」

error C2440: '=' : cannot convert from 'ListNode<T> *' to 'ListNode<T> *' 

和我真的不知道爲什麼。有人可以幫助我嗎?

template <class T> 
class ListNode 
{ 
private: 
    //Données membres 
    T m_Value; 
    ListNode<T> *m_Next; 
    ListNode<T> *m_Prev; 
public: 
    //Constructeur 
    ListNode() 
    { 
     m_Value = NULL; 
     m_Next = NULL; 
     m_Prev = NULL; 
    } 

    ListNode<T>(T _Value) 
    { 
     m_Value = _Value; 
     m_Next = NULL; 
     m_Prev = NULL; 
    } 

    //Accesseurs 
    T getValue() const 
    { return m_Value; } 

    void setValue(T _Value) 
    { m_Value = _Value; } 

    ListNode<T>* getNext() const 
    { return m_Next; } 

    void setNext(ListNode *_NextNode) 
    { m_Next = _NextNode; } 

    ListNode<T>* getPrev() const 
    { return m_Prev; } 

    void setPrev(ListNode *_PrevNode) 
    { m_Prev = _PrevNode; } 
}; 

template <class T> 
class List 
{ 
private: 
    //Données membres 
    int m_Compte; 
    ListNode<T> *m_Current; 
    ListNode<T> *m_Head; 
    ListNode<T> *m_Last; 

... 

這是誰造成的錯誤

template <class T> 
void operator+=(T _newValue) 
{ 
     Where the error is 

這條線是有故障的功能。我試圖創建一個新的節點,並影響到當前節點是一個指向ListNode

m_Current = new ListNode<T>(_newValue); 

    if (!m_Head) 
    { 
     m_Head = m_Current; 
    } 
    else 
    { 
     m_Last->setNext(m_Current); 
     m_Current->setPrev(m_Last); 
     m_Last = m_Current; 
    } 
    ++m_Compte; 
    return; 
} 

回答

3
template <class T> // <------ 'T' 
class List 
{ 
    ... 
    template <class T> // <------- 'T' again ? 
    void operator+=(T _newValue); 
}; 

看來,TList陰影Toperator +=。您可以使用typename Uoperator +=並給予一試。
另外,你確定,你要爲operator +=一個新的類型?或者你打算使用相同類型List<T>

在側面說明,對於operator +=典型語法是:

List& operator += (const List &copy) 
{ 
    ... 
    return *this; 
} 
0

我也說不上來,因爲整個類定義的右括號是不是在這裏,無論是運營商+ =內部或外部類定義。

如果是內,你定義它爲內聯,然後得到正確的上述運營商+ =擺脫模板。整個類是由在最高層的模板聲明覆蓋。

如果它被定義在類外,那麼你需要列出::運算符+ =。

相關問題