2012-03-13 181 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

我也说不上来,因为整个类定义的右括号是不是在这里,无论是运营商+ =内部或外部类定义。

如果是内,你定义它为内联,然后得到正确的上述运营商+ =摆脱模板。整个类是由在最高层的模板声明覆盖。

如果它被定义在类外,那么你需要列出::运算符+ =。

相关问题