我正在尝试重载= +运算符。有两个。一个用于链表+ +链表,另一个用于链表+ +模板类型。但是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;
答案 0 :(得分:0)
如果您使用模板,则无法将功能定义与声明分开。
DList ::前缀可能不在类体内的函数声明中。
你不应该包含cpp文件。这些文件应包含头文件,以便为编译器提供声明。