// 一元多项式的求和.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
//#include "LinkList.h" //如果在LinkList.h中没有#pragma once此行必须注释掉 ,因为PolyList.h已经包含了
#include "PolyList.h"
/*#include <iostream>
using namespace std;*/
//由于主函数包含了PolyList.h,它包含了LinkList.h,而LinkList.h又包含了#include <iostream>,
//所以可以不再包含<iostream>
//之所以可以在包含<iostream>是因为<iostream>里只有申明部分,没有变量或函数的定义,在生成的二进制
//可执行文件中不会产生相同的函数或变量。
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),element(5,100)};
PolyList lista(a,3);
PolyList listb(b,5);
listb.Add(lista);
listb.PrintList();
return 0;
}
/**LinkList.h*/
//#pragma once //此程序中可以注释掉此行
#include<iostream>
using namespace std;
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();
};
//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;
// }
//}
//
//template<class T>
//Node<T> *LinkList<T>::GetFirst()
//{
// return front;
//}
/**LinkList.cpp*/
#include "StdAfx.h"
#include "LinkList.h"
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;
}
}
template<class T>
Node<T> *LinkList<T>::GetFirst()
{
return front;
}
/**PolyList.cpp*/
#include "StdAfx.h"
#include "PolyList.h"
#include<cmath>
PolyList::PolyList():LinkList()
{
}
PolyList::~PolyList()
{
}
PolyList::PolyList(element data[], int n):LinkList(data,n)
{
}
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->next = 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;
}
}
if(q) p_prior->next = q;
B.GetFirst()->next = NULL;
}
void PolyList::PrintList()
{
Node<element> *p = front;
while(p->next)
{
cout <<"(" << p->next->data.coef<<","<< p->next->data.exp << ")";
p = p->next;
}
cout << endl;
}
/**PolyList.h*/
#pragma once //此程序中可以注释掉此行
#include "linklist.h"
class PolyList :
public LinkList<element>
{
public:
PolyList();
PolyList(element data[], int n);
~PolyList();
void Add(PolyList &B);
void PrintList();
};
报错:1>PolyList.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall LinkList<struct element>::LinkList<struct element>(void)" (??0?$LinkList@Uelement@@@@QAE@XZ),该符号在函数 "public: __thiscall PolyList::PolyList(void)" (??0PolyList@@QAE@XZ) 中被引用
1>PolyList.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall LinkList<struct element>::LinkList<struct element>(struct element * const,int)" (??0?$LinkList@Uelement@@@@QAE@QAUelement@@H@Z),该符号在函数 "public: __thiscall PolyList::PolyList(struct element * const,int)" (??0PolyList@@QAE@QAUelement@@H@Z) 中被引用
1>PolyList.obj : error LNK2019: 无法解析的外部符号 "public: struct Node<struct element> * __thiscall LinkList<struct element>::GetFirst(void)" (?GetFirst@?$LinkList@Uelement@@@@QAEPAU?$Node@Uelement@@@@XZ),该符号在函数 "public: void __thiscall PolyList::Add(class PolyList &)" (?Add@PolyList@@QAEXAAV1@@Z) 中被引用
1>C:\Users\shenqi67\documents\visual studio 2010\Projects\一元多项式的求和\Debug\一元多项式的求和.exe : fatal error LNK1120: 3 个无法解析的外部命令