10

我正在尝试使用数组实现堆栈,但收到错误消息。

class Stack{
private:
    int cap;
    int elements[this->cap]; // <--- Errors here
    int top;
public:
  Stack(){
     this->cap=5;
     this->top=-1;
};

指示的行有以下错误:

Multiple markers at this line
- invalid use of 'this' at top level
- array bound is not an integer constant before ']' token

我究竟做错了什么?

4

4 回答 4

27

在 C++ 中,数组的大小必须是编译时已知的常量。如果不是这种情况,您将收到错误消息。

在这里,你有

int elements[this->cap];

请注意,这this->cap不是编译时已知的常数,因为它取决于大小cap

如果您想要一个大小在以后确定的可变大小的数组,请考虑使用std::vector,它可以在运行时调整大小。

希望这可以帮助!

于 2013-05-08T20:14:10.313 回答
2

你不能this在这样的声明中使用。 this是传递给类中非静态方法的常量指针。它不存在于该范围之外。

这样的数组声明需要大小的常量值/表达式。你不想要那个,你想要一个动态大小的容器。解决方案是使用std::vector.

于 2013-05-08T20:14:09.650 回答
0

由于其他人已经解释了这个问题的原因,这里有一个可能的解决方案来解决它。由于您似乎在编译时可能不知道数组大小,并且分配可能会限制使用std::vector<int>考虑使用指针实现。

#include <algorithm>

class Stack{
private:
    int cap;
    int* elements; // use a pointer
    int top;
public:
    Stack(){
        this->cap=5;
        this->top=-1;
        elements = new int[this->cap];
    }

    Stack(const Stack& s) 
         : cap(s.cap) , top(s.top), elements(NULL)
    {
         if(cap > 0) {
             elements = new int[cap];
         }

         std::copy(s.elements , s.elements + cap, elements );
    }

    Stack& operator=(Stack s) {
         swap(s, *this);
         return  *this;
    }

    ~Stack() {delete [] elements;}

    friend void swap(Stack& first, Stack& second)
    {
        using std::swap; 
        swap(first.top, second.top);
        swap(first.cap, second.cap);
        swap(first.elements, second.elements);
    }
};
于 2013-05-08T20:24:53.813 回答
0

改变

int elements[this->cap];

int* elements=new int[cap]
于 2016-04-02T13:35:33.553 回答