首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一元多项式的求和报错: 类模板已经定义,该如何处理

2012-04-11 
一元多项式的求和报错: 类模板已经定义// 一元多项式的求和.cpp : 定义控制台应用程序的入口点。//#include

一元多项式的求和报错: 类模板已经定义

// 一元多项式的求和.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

热点排行