为何递归调用析够?进来看一下吧!

aaassd 2003-12-29 12:51:06
#ifndef _charLink_
#define _charLink_
#include <iostream>
using namespace std;
class node{
char c;
node* next;
public:
node(){
c = ' ';
next = NULL;
}
node(char ch){
c = ch;
next = NULL;
}
node(node& n){
c = n.c;
*next = *n.next;
}
node& operator= (const node& n){
c = n.c;
*next = *n.next;
return *this;
}
~node(){
cout<< "~node()" << endl;
if(next != NULL){
delete next;
next = NULL;
}
}
void setNext(node* n){
this->next = n;
}
char getNode(){
return c;
}
//friend class cStack;
};
class cStack{
node* header;
node* tmp;
int cout;
public:
cStack();
~cStack();

void push(char);
char pop();
bool isEmpty() const;
void reset();
int getCout() const;
};
#endif


部分实现如下:
void cStack::push(char c){
tmp = new node(c);
if(tmp == NULL)
throw "Out of memery";
tmp->setNext(header);//tmp->next = header;
header = tmp;
cout++;
}
char cStack::pop(){
if(cout>0){
char lc = header->getNode();
tmp = header;
tmp->setNext(header);//header = header->next;
cout--;
delete tmp;
return lc;
}else{
throw "Stack is empty!";
}
}
主函数:
int main()
{
cStack sck;
int i = 0;
int j = 0;
try{
sck.push('a');//这里出现递归调用~node(),应该怎么改?
或者怎么实现这个程序?
cout << sck.pop() << endl;
}catch(char *c) {
cout << c << endl;
}
...全文
39 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaassd 2003-12-30
  • 打赏
  • 举报
回复
谢谢
fierygnu 2003-12-30
  • 打赏
  • 举报
回复
为什么说不会?你这句的效果是header->setNext(header),不递归就怪了。
aaassd 2003-12-29
  • 打赏
  • 举报
回复
这里是错了,但是不会影响递归调用~node()的.
我把友员加上,在把注消的地方换一下,还是有这个问题的.
fierygnu 2003-12-29
  • 打赏
  • 举报
回复
cStack::pop()实现错了, tmp->setNext(header);应该是 tmp->setNext(header->next);

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧