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
相关产品推荐
相关产品推荐

