关于链表删除节点的小程序(网上步骤都无法解决 LNK2019: 无法解析的外部符号)
关于链表删除节点的小程序(网上方法都无法解决 LNK2019: 无法解析的外部符号)
问题代码出在 删除某个节点 这个函数,别的代码都正常运行
这是错误提示:
list.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall OnelinkNode::~OnelinkNode(void)" (??1OnelinkNode@@QAE@XZ),该符号在函数 "public: void * __thiscall OnelinkNode::`scalar deleting destructor'(unsigned int)" (??_GOnelinkNode@@QAEPAXI@Z) 中被引用
1>C:\Users\Baiyang\documents\visual studio 2012\Projects\Project6\Debug\Project6.exe : fatal error LNK1120: 1 个无法解析的外部命令
问题代码:
/**************************删除某个节点**************************/
bool Onelink::remove(OnelinkNode *p)
{
if (p!=NULL)
{
OnelinkNode *q=p->next;
if (q!=NULL)
{
p->next=p->next->next;
delete q;
return true;
}
}
return false;
}
全部代码:
#include <iostream>
#include <string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
class OnelinkNode
{
public:
string data;
OnelinkNode *next;
OnelinkNode(string k,OnelinkNode *nextnode=NULL)
{
for(int i=0;i<10;i++)
{data = k;}
next = NULL;
}
~OnelinkNode();
};
class Onelink
{
public:
OnelinkNode *head;
Onelink(int n=0);
~Onelink();
bool isEmpty()const
{
return head == NULL;
}
bool isFull()const
{
return false;
}
int length()const;
OnelinkNode* index(int i)const;
string get(int i)const;
bool set();
OnelinkNode* insert(OnelinkNode*p,string k);
bool remove(OnelinkNode *p);
void output(OnelinkNode *p)const;
void output()const;
};
/*************构建长度为n的链表******************/
Onelink::Onelink(int n)
{
head = NULL;
if (n>0)
{
int i=0;
OnelinkNode *rear,*q;
string first;
cin>>first;
head=new OnelinkNode(first);
rear = head;
string m[5];
cin>>m[0]>>m[1]>>m[2]>>m[3]>>m[4];
while(i<5)
{i++;
q = new OnelinkNode(m[i-1]);
rear->next=q;
rear=q;
};
}
};
Onelink::~Onelink()
{
};
/*************链表长度******************/
int Onelink::length()const
{
int i=0;
OnelinkNode *p=head;
while (p!=NULL)
{i++;
p=p->next;
}
cout<<"链表长度为: "<<i;
return i;
}
/*************返回链表第i个元素的指针******************/
OnelinkNode* Onelink::index(int i)const
{
if (i<=0)return NULL;
int j=1;
OnelinkNode *p=head;
while (p!=NULL &&j<i)
{
j++;
p=p->next;
}
return p;
}
/*************返回链表第i个元素的值******************/
string Onelink::get(int i)const
{
OnelinkNode *p=index(i);
if (p!=NULL)
return p->data;
else
return "null";
}
/*************设置单链表的第i个数据元素值******************/
bool Onelink::set()
{
int i;string k;
cout<<"输入要替换的元素位置:";
cin>>i;
cout<<"输入替换元素";
cin>>k;
OnelinkNode *p=index(i);
if(p!=NULL)
{
p->data=k;
return true;
}
else
return false;
}
/*************输出链表******************/
void Onelink::output(OnelinkNode *p)const
{
while (p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<"\n";
}
/*************输出链表全部内容******************/
void Onelink::output()const
{
cout<<"Onelink: ";
output(head);
}
OnelinkNode*Onelink::insert(OnelinkNode *p,string k)
{
OnelinkNode *q=new OnelinkNode(k);
if(p==NULL)
p=q;
else
{
q->next=p->next;
p->next=q;
}
return p;
}
/**************************删除某个节点**************************/
bool Onelink::remove(OnelinkNode *p)
{
if (p!=NULL)
{
OnelinkNode *q=p->next;
if (q!=NULL)
{
p->next=p->next->next;
delete q;
return true;
}
}
return false;
}
void main()
{
//OnelinkNode OnelinkNode_1();
Onelink Onelink_1(5);
Onelink_1.output();
Onelink_1.length();
Onelink_1.remove(Onelink_1.index(1));
system("pause");
};
------解决思路----------------------
在这里作为OnelinkNode类的析构函数声明,但是你所有的代码没有对OnelinkNode的析构函数进行定义。程序进行链接时找不到~OnelinkNode()的实现代码。
问题代码出在 删除某个节点 这个函数,别的代码都正常运行
这是错误提示:
list.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall OnelinkNode::~OnelinkNode(void)" (??1OnelinkNode@@QAE@XZ),该符号在函数 "public: void * __thiscall OnelinkNode::`scalar deleting destructor'(unsigned int)" (??_GOnelinkNode@@QAEPAXI@Z) 中被引用
1>C:\Users\Baiyang\documents\visual studio 2012\Projects\Project6\Debug\Project6.exe : fatal error LNK1120: 1 个无法解析的外部命令
问题代码:
/**************************删除某个节点**************************/
bool Onelink::remove(OnelinkNode *p)
{
if (p!=NULL)
{
OnelinkNode *q=p->next;
if (q!=NULL)
{
p->next=p->next->next;
delete q;
return true;
}
}
return false;
}
全部代码:
#include <iostream>
#include <string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
class OnelinkNode
{
public:
string data;
OnelinkNode *next;
OnelinkNode(string k,OnelinkNode *nextnode=NULL)
{
for(int i=0;i<10;i++)
{data = k;}
next = NULL;
}
~OnelinkNode();
};
class Onelink
{
public:
OnelinkNode *head;
Onelink(int n=0);
~Onelink();
bool isEmpty()const
{
return head == NULL;
}
bool isFull()const
{
return false;
}
int length()const;
OnelinkNode* index(int i)const;
string get(int i)const;
bool set();
OnelinkNode* insert(OnelinkNode*p,string k);
bool remove(OnelinkNode *p);
void output(OnelinkNode *p)const;
void output()const;
};
/*************构建长度为n的链表******************/
Onelink::Onelink(int n)
{
head = NULL;
if (n>0)
{
int i=0;
OnelinkNode *rear,*q;
string first;
cin>>first;
head=new OnelinkNode(first);
rear = head;
string m[5];
cin>>m[0]>>m[1]>>m[2]>>m[3]>>m[4];
while(i<5)
{i++;
q = new OnelinkNode(m[i-1]);
rear->next=q;
rear=q;
};
}
};
Onelink::~Onelink()
{
};
/*************链表长度******************/
int Onelink::length()const
{
int i=0;
OnelinkNode *p=head;
while (p!=NULL)
{i++;
p=p->next;
}
cout<<"链表长度为: "<<i;
return i;
}
/*************返回链表第i个元素的指针******************/
OnelinkNode* Onelink::index(int i)const
{
if (i<=0)return NULL;
int j=1;
OnelinkNode *p=head;
while (p!=NULL &&j<i)
{
j++;
p=p->next;
}
return p;
}
/*************返回链表第i个元素的值******************/
string Onelink::get(int i)const
{
OnelinkNode *p=index(i);
if (p!=NULL)
return p->data;
else
return "null";
}
/*************设置单链表的第i个数据元素值******************/
bool Onelink::set()
{
int i;string k;
cout<<"输入要替换的元素位置:";
cin>>i;
cout<<"输入替换元素";
cin>>k;
OnelinkNode *p=index(i);
if(p!=NULL)
{
p->data=k;
return true;
}
else
return false;
}
/*************输出链表******************/
void Onelink::output(OnelinkNode *p)const
{
while (p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<"\n";
}
/*************输出链表全部内容******************/
void Onelink::output()const
{
cout<<"Onelink: ";
output(head);
}
OnelinkNode*Onelink::insert(OnelinkNode *p,string k)
{
OnelinkNode *q=new OnelinkNode(k);
if(p==NULL)
p=q;
else
{
q->next=p->next;
p->next=q;
}
return p;
}
/**************************删除某个节点**************************/
bool Onelink::remove(OnelinkNode *p)
{
if (p!=NULL)
{
OnelinkNode *q=p->next;
if (q!=NULL)
{
p->next=p->next->next;
delete q;
return true;
}
}
return false;
}
void main()
{
//OnelinkNode OnelinkNode_1();
Onelink Onelink_1(5);
Onelink_1.output();
Onelink_1.length();
Onelink_1.remove(Onelink_1.index(1));
system("pause");
};
------解决思路----------------------
class OnelinkNode
{
public:
~OnelinkNode();
};
在这里作为OnelinkNode类的析构函数声明,但是你所有的代码没有对OnelinkNode的析构函数进行定义。程序进行链接时找不到~OnelinkNode()的实现代码。