在c++中堆叠自动变量



我是c++的新手,我想用​​然而,自动变量在数组中出现了一系列错误,dr可以帮我修复它,谢谢。显然,数组a被错误地声明了,top((函数发生了冲突,但我没有看到这个问题,因为我对自动变量不太熟悉,我有点迷失了方向。以下是代码和错误:

#include <bits/stdc++.h>
#include <array>
#include <iostream>
using namespace std;
#define MAX 1000
class Stack {
int top;
public:
auto a[MAX];
Stack() { top = -1; }
bool push(auto x);
auto pop();
auto top();
bool isEmpty();
};
bool Stack::push(auto x)
{
if (top >= (MAX - 1)) {
cout << "Stack Overflow";
return false;
}
else {
a[++top] = x;
cout << x << " pushed into stackn";
return true;
}
}
auto Stack::pop()
{
if (top < 0) {
cout << "Stack Underflow";
return 0;
}
else {
auto x = a[top--];
return x;
}
}
auto Stack::top()
{
if (top < 0) {
cout << "Stack is Empty";
return 0;
}
else {
auto x = a[top];
return x;
}
}
bool Stack::isEmpty()
{
return (top < 0);
}
int main() {
class Stack stk;
stk.push(4);
stk.push(5);
stk.push(6);
}

错误:

In file included from asgt.h:6,
from asgt.cpp:1:
graph.h:45:10: error: ‘a’ declared as array of ‘auto’
45 |     auto a[MAX];
|          ^
graph.h:48:15: warning: use of ‘auto’ in parameter declaration only available with ‘-fconcepts’
48 |     bool push(auto x);
|               ^~~~
graph.h:50:14: error: ‘auto Stack::top()’ conflicts with a previous declaration
50 |     auto top();
|              ^
graph.h:42:9: note: previous declaration ‘int Stack::top’
42 |     int top;
|         ^~~
graph.h:54:18: warning: use of ‘auto’ in parameter declaration only available with ‘-fconcepts’
54 | bool Stack::push(auto x)
|                  ^~~~
graph.h: In member function ‘bool Stack::push(auto:2)’:
graph.h:61:9: error: ‘a’ was not declared in this scope
61 |         a[++top] = x;
|         ^
graph.h: In member function ‘auto Stack::pop()’:
graph.h:74:18: error: ‘a’ was not declared in this scope
74 |         auto x = a[top--];
|                  ^
graph.h: At global scope:
graph.h:78:6: error: no declaration matches ‘auto Stack::top()’
78 | auto Stack::top()
|      ^~~~~
graph.h:42:9: note: candidate is: ‘int Stack::top’
42 |     int top;
|         ^~~
graph.h:41:7: note: ‘class Stack’ defined here
41 | class Stack {
|       ^~~~~
asgt.cpp:17:26: warning: use of ‘auto’ in parameter declaration only available with ‘-fconcepts’

您需要使用模板。Stack类的声明应该更像:

template <class T>
class Stack<T> {
int top;
public:
T a[MAX];
Stack() { top = -1; }
bool push(const T& x); // can't afford to copy if your Stack is general purpose
T pop();
T get_top(); // can't have same name for member and method
bool isEmpty();
};

此外,您可能希望重载push((,以便通过const引用和lvalue引用进行传递(也就是说,移动堆栈中的某些内容(。而且您肯定想将a设为私有。

所用编译器的错误消息的含义如下。

这样一个数组的声明

auto a[MAX];

无效。编译器无法确定数组的实际类型。禁止将说明符auto与数组声明一起使用。

不能使用说明符auto来声明函数参数。

bool push(auto x);

数据成员和成员功能可能没有相同的名称

int top;
//...
auto top();

最新更新