一元多项式的求和报错: 类模板已经定义
// 一元多项式的求和.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "LinkList.h"
#include "PolyList.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
element a[]={element(1,0),element(2.3,2),element(3,4)};
element b[]={element(1,1),element(-2.3,2),element(3,4),element(5,10)};
PolyList lista(a,3);
PolyList listb(b,4);
lista.Add(listb);
lista.PrintList();
return 0;
}
template<class T>
struct Node
{
T data;
struct Node<T>* next;
};
struct element
{
double coef;
int exp;
element(double c=0,int e=0):coef(c),exp(e){}
};
template<class T>
class LinkList
{
protected:
Node<T> *front;
public:
LinkList();
LinkList(T a[], int n);
virtual void PrintList();
Node<T> * GetFirst(){return front;}
};
template<class T>
LinkList<T>::LinkList()
{
front = new Node<T>;
front->next = NULL;
}
template<class T>
LinkList<T>::LinkList(T a[],int n)
{
front = new Node<T>;
front->next = NULL; //初始化
for(int i=n-1;i>=0;i--)
{
Node<T> *p = new Node<T>;
p->data=a[i];
p->next = front->next;
front->next = p;
}
}
class PolyList :
public LinkList<element>
{
public:
PolyList(void){};
PolyList(element data[], int n):LinkList(data,n){}
~PolyList(void);
void Add(PolyList &B);
void PrintList();
};
PolyList::~PolyList(void)
{
}
void PolyList::Add(PolyList &B)
{
Node<element> *p_prior = GetFirst();
Node<element> *p = p_prior->next;
Node<element> *q = B.GetFirst()->next;//初始化
while(p&&q)
{
if(p->data.exp < q->data.exp)
{
p_prior = p;
p = p->next;
}
else if(p->data.exp > q->data.exp)
{
p_prior->next = q;
p_prior = q;
q = q->next;
p_prior->next = p;
}
else
{
p->data.coef += q->data.coef;
if(fabs(p->data.coef) < 1e-7)
{
p_prior = p->next;
delete p;
p = p_prior->next;
}
else
{
p_prior = p;
p = p_prior->next;
}
Node<element> *temp = q;
q = q->next;
delete temp;
}
}
}
void PolyList::PrintList()
{
Node<element> *p = front;
while(p->next)
{
cout <<"(" << p->next->data.coef<<","<< p->next->data.exp << ")";
p = p->next;
}
cout << endl;
}
报错::\users\shenqi67\documents\visual studio 2010\projects\一元多项式的求和\一元多项式的求和\linklist.h(9): error C2953: “Node”: 类模板已经定义
1> c:\users\shenqi67\documents\visual studio 2010\projects\一元多项式的求和\一元多项式的求和\linklist.h(6) : 参见“Node”的声明
1>c:\users\shenqi67\documents\visual studio 2010\projects\一元多项式的求和\一元多项式的求和\linklist.h(12): error C2011: “element”:“struct”类型重定义
1> c:\users\shenqi67\documents\visual studio 2010\projects\一元多项式的求和\一元多项式的求和\linklist.h(12) : 参见“element”的声明
1>c:\users\shenqi67\documents\visual studio 2010\projects\一元多项式的求和\一元多项式的求和\linklist.h(28): error C2953: “LinkList”: 类模板已经定义
1> c:\users\shenqi67\documents\visual studio 2010\projects\一元多项式的求和\一元多项式的求和\linklist.h(20) : 参见“LinkList”的声明
1>c:\users\shenqi67\documents\visual studio 2010\projects\一元多项式的求和\一元多项式的求和\linklist.h(35): error C2244: “LinkList<T>::{ctor}”: 无法将函数定义与现有的声明匹配
[解决办法]
"LinkList.h"
里面有Node LinkList这些类的定义了吧?
把main函数下面的注释了.
或者"LinkList.h"重复包含了
在"LinkList.h"的最上面加 #ifndef _LINKLIST_H_
#define _LINKLIST_H_
最后面加 #endif