使用链表实现堆栈时出错

error in implementing stack using linked list

本文关键字:出错 堆栈 实现 链表      更新时间:2023-10-16

我正在尝试使用 cpp 中的链表实现堆栈。我正在使用类来制作链表,但我收到以下错误,我不明白为什么

#include <bits/stdc++.h>
using namespace std;
class Stack{
public:
int top;
Stack* next;
Stack(int data){ //constructor
top = data;
next = NULL;
}
void push(Stack* &head, int data);
int pop(Stack* &head);
bool empty(Stack* &head);
};
void Stack::push(Stack* &head, int data){
Stack* s = new Stack(data);
s->next = head;
head = s;
}
int pop(Stack* &head){
int x = head->top;
head = head->next;
return x;
}
bool empty(Stack* &head){
if(head == NULL)
return true;
return false;
}
int main() {
class Stack* s = new Stack(1);
s.push(2);
s.push(3);
cout << s.empty(s) << endl;
cout << s.pop(s) << endl;
cout << s.pop(s) << endl;
cout << s.pop(s) << endl;
cout << s.empty(s) << endl;
}

错误:请求"s"中的成员"push",其指针类型为"Stack*"(也许您打算使用"->"?

请求"s"中的成员"空",其指针类型为"堆栈*"(也许您打算使用"->"?

请求成员"pop"在">

s"中,其指针类型为"堆栈*"(也许您打算使用"->"?

当我使用 -> 而不是 . 它说对 Stack::empty(Stack*&( 的未定义引用和对 Stack::p op(Stack*&( 的未定义引用

编辑:我用 -> 而不是 . 并添加了 Stack:: 来弹出和空函数,它有效但构造函数不起作用

正如错误消息所说,当你有一个Stack*,你需要使用->,而不是.,如下所示:

s->push(s, 42);
s->empty(s);
// etc

但是,您可能根本不需要Stack*,只需使用常规Stack对象即可。

此外,在类外部定义的成员函数需要使用类的名称进行限定。所以你需要:

bool Stack::empty(Stack* &head){

而不是:

bool empty(Stack* &head){

就像您已经为Stack::push方法所做的那样。

每当访问指针指向的结构的数据成员时,请使用 ->。在您的情况下,请尝试使用 -> 而不是 。在主函数 (( 中的 s 上 所以,要么做

Stack s; 
s.push(1);

Stack* s;
s->push(s,1);

你"不小心"声明了一个指针。像这样更改代码

int main()
{
Stack s(1);
s.push(2);
...