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

は、この行が不良である1原因の関数です。私は、新しいノードを作成しようとしていると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); 
}; 

へのポインタをある現在のノードに影響を与えているようだ、そのListoperator +=ためTためT。あなたはoperator +=のためにtypename Uを使用し、試してみてください。
また、operator +=の新しいタイプが必要ですか?または、List<T>と同じタイプを使用する予定ですか。

サイドノートで

operator +=のための一般的な構文は次のとおりです。

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

閉じ中括弧に全体のクラス定義は演算子+ =は内部またはクラスの外にあるかどうか、ここではないので、私は、言うことができません定義。

内部にあり、インラインとして定義している場合は、演算子+ =の直上にあるテンプレートを削除します。クラス全体は、一番上のテンプレート宣言によってカバーされています。

クラス外で定義されている場合、List :: operator + =が必要です。

関連する問題