错误C2440:'=':无法从'ListNode <t> *'转换为'ListNode <t> *'</t> </t>

时间:2012-03-13 03:50:04

标签: c++ templates compiler-errors

我正在尝试创建一个双向链表,我收到了这个错误:

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;
}

2 个答案:

答案 0 :(得分:3)

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

对于TList 阴影 T似乎operator +=。您可以typename U使用operator +=并试一试 另外,您确定要为operator +=添加新类型吗?或者您打算使用与List<T>相同的类型。

另外,operator +=的典型语法是:

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

答案 1 :(得分:0)

我无法分辨,因为关闭括号的整个类定义不在此处,无论operator + =是在类定义的内部还是外部。

如果它在里面并且你将它定义为内联,那么摆脱operator + =上方的模板。最顶层的模板声明涵盖了整个类。

如果在类之外定义它,则需要List :: operator + =。