You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++数组实现Stack时通过构造函数传入size出现编译错误如何解决

错误原因分析
  • C++标准不支持变长数组(VLA),即普通数组的长度必须是编译期可确定的常量。你使用类的非静态成员size作为数组长度,size的值是构造函数运行时才传入的,编译期无法确定,直接导致stack_arr的定义非法,编译器不识别该成员变量,后续所有操作stack_arr的代码都会报未声明错误。
  • 你现有代码的栈满判断写死为top >= 4,和你传入的size参数完全无关,就算编译通过也无法适配不同大小的栈。
  • isempty成员函数存在逻辑漏洞:栈为空时仅打印内容没有返回值,会触发未定义行为。
正确实现方案

要实现运行时指定栈的大小,需要使用动态内存分配在堆上开辟数组空间,同时补充析构函数释放内存避免泄漏,修正后的完整代码如下:

#include <iostream>
using namespace std;

class Stack {
private:
    int* stack_arr; // 改为指针,后续动态分配
    int size;
    int top;

public:
    // 构造函数:初始化成员,动态开辟数组
    Stack(int n) : size(n), top(-1) {
        stack_arr = new int[size];
    }

    // 析构函数:释放数组空间
    ~Stack() {
        delete[] stack_arr;
    }

    void push(int a) {
        // 栈满判断改为和size比较
        if (top >= size - 1)
            cout << "Stack is full" << endl;
        else {
            top++;
            stack_arr[top] = a;
        }
    }

    void pop() {
        if (top <= -1)
            cout << "There is no element remaining in stack" << endl;
        else {
            cout << "The popped element is " << stack_arr[top] << endl;
            top--;
        }
    }

    void peek() {
        if (top < 0) {
            cout << "Stack is Empty" << endl;
        }
        else {
            int x = stack_arr[top];
            cout << "The last element in the Stack is: " << x << endl;
        }
    }

    bool isempty() {
        return top == -1;
    }

    void display() {
        if (top >= 0) {
            cout << "Stack elements are:";
            for (int i = top; i >= 0; i--)
                cout << stack_arr[i] << " ";
            cout << endl;
        }
        else
            cout << "Stack is empty" << endl;
    }
};

int main() {
    Stack s(5);
    s.push(10);
    s.push(12);
    s.push(14);
    s.push(10);
    s.push(12);
    s.push(14); // 这个会触发栈满提示
    s.peek();
    s.display();
    s.pop();
    s.display();
    return 0;
}
运行效果说明

上述代码可以正常编译运行,创建栈对象时可以传入任意正整数作为栈的容量,栈的大小会按传入参数动态分配,不会出现原代码的编译错误。

内容的提问来源于stack exchange,提问作者S.Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:15:03