使用链表实现堆栈时出错
error in implementing stack using linked list
我正在尝试使用 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);
...
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在此堆栈操作中我哪里出错了?
- 使用链表实现堆栈时出错
- 使用提升库在队列和堆栈数据结构上保存和加载数据时出错
- 动态堆栈、编译时出错、dev编译器和g++
- 将字符串放入堆栈C++时出错
- 反转堆栈时出错,你能指出来吗?
- 将矢量用作堆栈的容器适配器时出错
- 创建一个类时出错,该类的对象不能在堆栈上创建,只能在堆上创建
- 我的堆栈使用链表时出错.无法打印数字循环.(C++)
- 我的堆栈的打印代码出现分段错误,不知道我哪里出错了。
- 访问数组时出错 - 变量"分数"周围的堆栈已损坏
- 尝试使用矢量实现堆栈时出错
- Tcl_Eval在出错时返回调用堆栈