Error: 无法解析的外部符号
头文件:
#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
#include <iostream>
using namespace std;
typedef struct Node
{
float coef;
int expn;
Node *next;
}Node, *Link;
typedef Link polynomial;
// 插入一项
void InsertPolyn( polynomial &P, float c, int e );
// 建多项式
void CreatPolyn( polynomial &P, int m );
// 删除一项
int DeletePolyn( polynomial &P, int e );
// 多项式有多少项
int PloynLength( polynomial P );
// 删掉整个多项式
void DestroyPolyn( polynomial &P );
// 打印多项式
void PrintPolyn( polynomial P );
#endif
源文件:
#include "Polynomial.h"
void InsertPolyn( polynomial &P, float c, int e )
{
Node *p = P;
while ( p->next && p->next->expn < e )
{
p = p->next;
}
if ( p->next->expn == e )
{
p->next->coef += c;
}
else // p->next->expn > e || p->nex == NULL
{
Node *s = new Node;
s->coef = c;
s->expn = e;
s->next = p->next;
p->next = s;
}
}
void CreatPolyn( polynomial &P, int m )
{
P->coef = 0.0;
P->expn = -1;
P->next = NULL;
for ( int i = 0; i != m; ++i )
{
float c;
int e;
cin >> c >> e;
InsertPolyn( P, c, e );
}
}
int DeletePolyn( polynomial &P, int e )
{
Node *p = P;
while ( p->next && p->next->expn < e )
{
p = p->next;
}
if ( p->next == NULL || p->next->expn > e )
{
cout << "Delete Error!" << endl;
return 1;
}
if ( p->next->expn == e )
{
Node *s = p->next;
p->next = s->next;
delete s;
}
return 0;
}
int PloynLength( polynomial P )
{
Node *p = P;
int i = 0;
while ( p->next )
{
p = p->next;
++i;
}
return i;
}
void DestroyPolyn( polynomial &P )
{
Node *p = P;
while ( p->next )
{
DeletePolyn( P, p->next->expn );
}
delete p;
}
void PrintPolyn( polynomial P )
{
Node *p = P;
bool start = true;
while ( p->next )
{
if ( start )
{
cout << p->next->coef << "x^" << p->next->expn;
}
else
{
if ( p->next->coef > 0 )
{
cout << " + ";
}
else
{
cout << " - ";
}
cout << p->next->coef << "x^" << p->next->expn;
}
}
cout << endl;
}
主函数:
#include "Polynomial.h"
int main()
{
polynomial P1;
polynomial P2;
int m1 = 4;
int m2 = 3;
CreatPolyn( P1, m1 );
CreatPolyn( P2, m2 );
PrintPolyn( P1 );
PrintPolyn( P2 );
return 0;
}
错误提示为:
>Debug\Polynomial.obj : warning LNK4042: 对象被多次指定;已忽略多余的指定
1>Main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl PrintPolyn(struct Node *)" (?PrintPolyn@@YAXPAUNode@@@Z),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl CreatPolyn(struct Node * &,int)" (?CreatPolyn@@YAXAAPAUNode@@H@Z),该符号在函数 _main 中被引用
1>D:\Projects\DataStructure\Debug\DataStructure.exe : fatal error LNK1120: 2 个无法解析的外部命令
[解决办法]
using namespace std;
丢到源文件中去
[解决办法]
链接问题,我倒是没遇到....不过你的实现写的...我实在看不下去了
void InsertPolyn( polynomial &P, float c, int e )
{
Node *p = P;
while ( p->next && p->next->expn < e )
{
p = p->next;
}
if ( p->next && p->next->expn == e )//p->next是否存在都不判断了???
{
p->next->coef += c;
}
else
{
Node *s = new Node();//()呢??
s->coef = c;
s->expn = e;
s->next = p->next;
p->next = s;
}
}
void CreatPolyn( polynomial &P, int m )
{
P=new Node();//别忘了new 亲~
P->coef = 0.0;
P->expn = -1;
P->next = nullptr;
for ( int i = 0; i != m; ++i )
{
float c;
int e;
cin >> c >> e;
InsertPolyn( P, c, e );
}
}
int DeletePolyn( polynomial &P, int e )
{
Node *p = P;
while ( p->next && p->next->expn < e )
{
p = p->next;
}
if ( p->next == NULL
[解决办法]
p->next->expn > e )
{
cout << "Delete Error!" << endl;
return 1;
}
if ( p->next->expn == e )
{
Node *s = p->next;
p->next = s->next;
delete s;
}
return 0;
}
int PloynLength( polynomial P )
{
Node *p = P;
int i = 0;
while ( p->next )
{
p = p->next;
++i;
}
return i;
}
void DestroyPolyn( polynomial &P )
{
Node* p=P;
while (p) //何必多此一举,调用delete
{
Node *s=p;
p=p->next;
delete s;
}
}
void PrintPolyn( polynomial P )
{
Node *p = P;
bool start = true;
while ( p->next )
{
if ( start )
{
cout << p->next->coef << "x^" << p->next->expn;
p=p->next; //都不next...要死循环的
start=false;//别忘了关闭...
}
else
{
if ( p->next->coef > 0 )
{
cout << " + ";
}
else
{
cout << " - ";
}
cout << p->next->coef << "x^" << p->next->expn;
p=p->next;
}
}
cout << endl;
}