将 char 推入堆栈不起作用
pushing a char into the stack does not work
我正在尝试用链表制作一堆字符
所以我为堆栈和节点做了两个类
但是当我试图将一个字符压入堆栈时:
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; }
};
'stack' 貌似是你的 class 的名字。你需要实例化它。喜欢
stack someStackInstance;
someStackInstance.push('x');
您可能想在您拥有 stack->push('x')
的地方显示您的完整代码(不是您使用的是指针)。
试试这个方法:
stack someObj;
someObj.push(whatever_you-want_to_push);
->
运算符用于指针。
在 class stack
之前声明 class node
。我的建议是使用 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
的传递参数有任何用处。您没有在当前实施中使用它。
我正在尝试用链表制作一堆字符
所以我为堆栈和节点做了两个类
但是当我试图将一个字符压入堆栈时:
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; }
};
'stack' 貌似是你的 class 的名字。你需要实例化它。喜欢
stack someStackInstance;
someStackInstance.push('x');
您可能想在您拥有 stack->push('x')
的地方显示您的完整代码(不是您使用的是指针)。
试试这个方法:
stack someObj;
someObj.push(whatever_you-want_to_push);
->
运算符用于指针。
在 class stack
之前声明 class node
。我的建议是使用 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
的传递参数有任何用处。您没有在当前实施中使用它。