build时失误:error C2143: syntax error : missing '' before '<'
build时出错:error C2143: syntax error : missing ';' before '<'
仿照《C++数据结构原理与经典问题求解》编写了一个Cpp加密程序,运用双向链表结构,编译时无报错,但是在build时出现一大堆莫名其妙的问题,恳请各位帮忙看一下,程序如下:
"DouList.h":
"DouListNode.h":
"DouList.cpp":
仿照《C++数据结构原理与经典问题求解》编写了一个Cpp加密程序,运用双向链表结构,编译时无报错,但是在build时出现一大堆莫名其妙的问题,恳请各位帮忙看一下,程序如下:
"DouList.h":
template <class T> class DouList
{
DouListNode<T>* head;
DouListNode<T>* tail;
DouListNode<T>* cur;
public:
DouList();
~DouList(){};
bool AddTail(T value);
bool AddHead(T value);
void RemoveThis(bool direction);
void RemoveALL();
void SetBegin();
int GetCount();
void TowardCur();
void BackCur();
DouListNode<T>* GetCur();
DouListNode<T>* GetHead();
DouListNode<T>* GetTail();
void InsertAfter(T value);
bool IsEmpty();
T GetNext();
T GetPrior();
};
"DouListNode.h":
template <class T> class DouListNode
{
T data;
DouListNode<T>* link;//后继
DouListNode<T>* prior;//私有//前驱
public:
DouListNode() :link(NULL),prior(NULL){};
DouListNode(T value) :link(NULL),prior(NULL),data(value){};
~DouListNode() {};
void SetLink(DouListNode<T>* next);
void SetPrior(DouListNode<T>* pre);
DouListNode<T>* GetLink();
DouListNode<T>* GetPrior();
T& GetData();
};
"DouList.cpp":
#include "DouList.h"
//双向链表类的实现
using namespace std;
template <class T>
DouList<T>::DouList()//默认构造函数
{
head=tail=new DouListNode<T>;
cur=NULL;
head->SetLink(head);//创建初始循环
head->SetPrior(tail);
}
template <class T>
bool DouList<T>::AddTail(T value)//表尾插入一个新结点,结点存储的数据由value决定
{
DouListNode<T>* add=new DouListNode<T>(value);////////注意格式
tail->SetLink(add);//使新结点为表尾结点的后继结点
add->SetPrior(tail);
tail=tail->GetLink();
tail->SetLink(head);//表尾指向表头
head->SetPrior(add);//表头结点的前驱为表尾
if(tail!=NULL)
{
return true;
}
else
return false;
}
template <class T>
bool DouList<T>::AddHead(T value)//表头结点与第一个结点间插入新结点
{
DouListNode<T>* add=new DouListNode<T>(value);
add->SetPrior(head);
add->SetLink(head->GetLink());
head->GetLink()->SetPrior(add);//原来第一个结点的前驱指向新插入的结点
head->SetLink(add);
//若是对空链表插入新结点,则应该更新尾指针
if(tail==head)
{
tail=head->GetLink();
}
if(add!=NULL)
{
return true;
}
else
return false;
}
template <class T>
void DouList<T>::RemoveThis(bool direction)//将当前cur指向的结点删除,删除后cur移动方向由direction决定
{
if(cur==head)//若当前cur位于表头处,则顺序移动cur
{
if(0==direction)//direction=0则朝link方向移动
cur=cur->GetLink();
if(1==direction)//direction=1则朝prior方向移动
cur=cur->GetPrior();
}
DouListNode<T>* preCur=NULL;
DouListNode<T>* nextCur=NULL;
preCur=cur->GetPrior();
nextCur=cur->GetLink();
preCur->SetLink(cur->GetLink());
nextCur->SetPrior(cur->GetPrior());
if(0==direction)
{
cur=nextCur;
}
if(1==direction)
{
cur=preCur;
}
template <class T>
void DouList<T>::RemoveAll()//删除所有结点,保留表头结点