错误C2244无法将函数定义与cpp ///运算符重载中的现有声明匹配

时间:2017-12-07 21:10:12

标签: c++ templates

我正在尝试重载= +运算符。有两个。一个用于链表+ +链表,另一个用于链表+ +模板类型。但是vs给了我一个错误。

template <class T>
const DList<T>& DList<T>::operator += (const DList & rhs)
{
    Node<T> temp=head;
while(temp->next!=NULL)
{
    temp=temp->next;
}

rhs.head->prev=temp;
temp->next=rhs.head;

return *this;
}

template <class T>
 DList<T>& DList<T>::operator += (T n)
 {

    Node<T> * temp= new Node<T>(n, NULL, head);

    head=temp;

return *this;
 }

这里是整个标题:

#ifndef _DList_H
#define _DList_H


template <class T>

struct Node
{
T val;
Node<T>* next;
Node<T>* prev;
Node(T el, Node<T>* p=NULL, Node<T>* n=NULL ): val(el), prev(p), next(n) 
{};
};
template <class T>

 class DList
 {
 private:

 Node<T>* head;
 int size;


 public:
const DList & DList::operator += (const DList & rhs);


DList();
DList(const DList&);
~DList();
bool isEmpty();
void printList() const;
void addToBeginning(T n);
void deleteList ();

const DList<T> & DList::operator = (const DList & rhs);

const DList<T> & DList::operator += (T);
const DList<T> & DList::operator -= (T);
bool  DList<T>::operator < (const DList & rhs);
bool  DList<T>::operator > (const DList & rhs);
bool  DList<T>::operator == (const DList & rhs);
Node<T> * createClone () const;
};
#include "DList.cpp"  
#endif
不过,这是我的第一个问题。我希望能够清楚地问清楚并正确使用格式。

完整的错误消息: 错误1错误C2244:'DList :: + =':无法将函数定义与现有声明匹配

+ =运算符使用如下:

list4 + = list1 + = list2;

list1 -= 5;



 list1 -= 6;

1 个答案:

答案 0 :(得分:0)

如果您使用模板,则无法将功能定义与声明分开。

DList ::前缀可能不在类体内的函数声明中。

你不应该包含cpp文件。这些文件应包含头文件,以便为编译器提供声明。