C++ 将字符推入堆栈不起作用
我想用链表做一堆字符 所以我为stack和node创建了两个类 但当我试图将字符推入堆栈时:C++ 将字符推入堆栈不起作用,c++,class,stack,C++,Class,Stack,我想用链表做一堆字符 所以我为stack和node创建了两个类 但当我试图将字符推入堆栈时: stack->push('x') 它不工作,并给出以下两个错误:应为标识符,应为类型说明符 class stack { private: node* top; int size; public: stack() { top = NULL; size = 0; } node* gettop() { re
stack->push('x')
它不工作,并给出以下两个错误:应为标识符,应为类型说明符
class stack
{
private:
node* top;
int size;
public:
stack() { top = NULL; size = 0; }
node* gettop() { return top; }
int getsize() { return size; }
void settop(node* t) { top = t; }
void setsize(int s) { size = s; }
bool isempty() { return getsize() == 0; }
char gettopelement() { return top->getdata(); }
void push(char x){ top = new node (x, top);
size += 1; }
char pop() {
if (isempty() == true)
cout << "erorr stack is empty";
else {
node* p = top;
char temp = gettopelement();
top = top -> next;
delete p;
size -= 1;
return temp;
}
}
};
class node
{
public:
char data;
node* next;
node(char d) { data = d; next = NULL; }
node(char d, node* n) { data = d; next = NULL; }
int getdata() { return data; }
node* getnext() { return next; }
void setdata(char d) { data = d; }
void setnext(node* n) { next = n; }
};
类堆栈
{
私人:
节点*顶部;
整数大小;
公众:
堆栈(){top=NULL;size=0;}
node*gettop(){return top;}
int getsize(){return size;}
void settop(node*t){top=t;}
void setsize(int s){size=s;}
bool isempty(){return getsize()==0;}
char gettopelement(){return top->getdata();}
void push(char x){top=新节点(x,top);
大小+=1;}
char pop(){
如果(isempty()==true)
下一步;
删除p;
尺寸-=1;
返回温度;
}
}
};
类节点
{
公众:
字符数据;
节点*下一步;
节点(chard){data=d;next=NULL;}
节点(char d,node*n){data=d;next=NULL;}
int getdata(){return data;}
node*getnext(){return next;}
void setdata(chard){data=d;}
void setnext(node*n){next=n;}
};
“stack”似乎是类的名称。您需要实例化它。像
stack someStackInstance;
someStackInstance.push('x');
您可能希望在有堆栈->推送('x')的位置显示完整的代码(您没有使用指针)。请尝试以下方法:
stack someObj;
someObj.push(whatever_you-want_to_push);
->
运算符用于指针
在类堆栈
之前声明类节点
。我的建议是使用std::stack
。
代码的改进:
node(char d) { data = d; next = NULL; }
node(char d, node* n) { data = d; next = NULL; }
可以更好地书写为:
node(char d, node* n = NULL) { data = d; next = NULL; }
实际上,我看不到传递的node*n
参数有任何用处。您没有在当前实现中使用它。此代码不可编译。它不会重现所描述的问题。A会很有帮助。您在此处显示的代码声明它确实存在。代码中不会出现行stack->push('x')
。请显示演示特定问题的代码。研究初始化列表:node(char d,node*n=nullptr):数据(d),下一个(n){;}