简体   繁体   English

C++中的堆栈自动变量

[英]Stack auto variable in c++

I'm new to c ++ and I'm wanting to build a stack with ​​automatic variables, however, get a series of errors in the array, dr can help me fix it thanks.我是 C++ 新手,想用自动变量构建一个堆栈,但是,在数组中出现一系列错误,dr 可以帮助我修复它,谢谢。 Apparently the array a is wrongly declared and the top() function is in conflict, but I don't see this problem, as I have little familiarity with automatic variables I'm a little lost.显然数组 a 被错误地声明并且 top() 函数发生冲突,但我没有看到这个问题,因为我对自动变量不太熟悉,我有点迷茫。 Here's the code and errors:这是代码和错误:

#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 stack\n";
        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);

}

Error:错误:

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’

You need to use templates for that.您需要为此使用模板 The declaration of your Stack class should look more something like:你的 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();
};

Also, probably you might want to overload push() in order to pass both by const reference and by lvalue reference (that is, to move something in your stack).此外,您可能想要重载 push() 以便通过常量引用和左值引用传递(即,移动堆栈中的某些内容)。 And you definitely want to make a private.你一定要做出a私人。

The error messages of the used compiler mean the following.所用编译器的错误信息含义如下。

Such a declaration of an array这样的数组声明

auto a[MAX];

is invalid.是无效的。 The compiler is unable to determine the actual type of the array.编译器无法确定数组的实际类型。 Using the specifier auto with array declarations is prohibited.禁止在数组声明中使用说明符 auto。

A function parameter may not be declared with the specifier auto.不能使用说明符 auto 声明函数参数。

bool push(auto x);

Data member and member function may not have the same name数据成员和成员函数不能同名

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM