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

Error: 没法解析的外部符号

2013-09-06 
Error: 无法解析的外部符号头文件:#ifndef POLYNOMIAL_H#define POLYNOMIAL_H#include iostreamusing na

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;
}

热点排行