将 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 的传递参数有任何用处。您没有在当前实施中使用它。