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

C++声明数组时遇‘expression must have a constant value’错误求助

问题原因

你遇到的expression must have a constant value错误,核心原因是:C++标准规定,静态数组的大小必须是编译阶段就能确定的常量值,而你用了用户输入的size变量(这个值是运行时才确定的)来声明数组int list[size];,这不符合标准语法。

另外注意代码里的一个拼写错误:函数名sunNonNegative应该是sumNonNegative,不然调用的时候会找不到正确的函数。

解决方案

下面给两种常用的修正方式,优先推荐第一种:

1. 使用std::vector(推荐)

std::vector是C++标准库提供的动态数组容器,完美适配这种需要运行时确定大小的场景,还能自动管理内存,避免泄漏。修改后的代码如下:

#include <iostream>
#include <vector> // 必须包含vector头文件
using namespace std;

// 修正函数名拼写错误
int sumNonNegative(int* arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] >= 0) {
            sum += arr[i];
        }
    }
    return sum;
}

int main()
{
    int size;
    cout << "Enter the size of the List: ";
    cin >> size;

    // 用vector替代静态数组
    vector<int> list(size);

    cout << "Enter " << size << " elements:" << endl;
    for (int i = 0; i < size; i++) {
        cin >> list[i];
    }

    // vector可以直接用data()获取底层数组指针
    int result = sumNonNegative(list.data(), size);
    cout << "Sum of non-negative-values: " << result << endl;

    return 0;
}

2. 使用动态内存分配(new/delete)

如果你不想用vector,也可以手动用new来分配动态数组,但要记得用完后用delete[]释放内存,否则会造成内存泄漏:

#include <iostream>
using namespace std;

int sumNonNegative(int* arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] >= 0) {
            sum += arr[i];
        }
    }
    return sum;
}

int main()
{
    int size;
    cout << "Enter the size of the List: ";
    cin >> size;

    // 动态分配数组
    int* list = new int[size];

    cout << "Enter " << size << " elements:" << endl;
    for (int i = 0; i < size; i++) {
        cin >> list[i];
    }

    int result = sumNonNegative(list, size);
    cout << "Sum of non-negative-values: " << result << endl;

    // 释放动态分配的内存
    delete[] list;

    return 0;
}

内容的提问来源于stack exchange,提问作者Matt Kalyp3r

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:02:55