我想要一个函数,该函数需要一个正整数,然后声明一个数组,对其进行初始化并打印。以下代码适用于GCC编译器,但不适用于MSVC编译器。我得到了错误
错误(有效)E0028表达式必须具有恒定值。参数“ Length”的值(在第5行声明)不能用作常量
我的代码:
#include <iostream>
using namespace std;
void Print(const int Length)
{
int Array[Length];
for (int i = 0; i <= Length - 1; i++)
{
Array[i] = i;
cout << Array[i];
}
}
int main()
{
const int L = 5;
Print(L);
return 0;
}
答案 0 :(得分:0)
正如评论中指出的那样,您绝对应该使用std::vector<int>
。
如果您希望数组仅存在于函数Print
中,则可以使用new
在堆栈上声明一个动态数组。不过,请注意存储器的使用情况,因为Print
可能会被大量调用,这会导致堆栈溢出(再次,请使用vector来避免这种情况)。
#include <iostream>
using namespace std;
void Print(const int Length)
{
int *Array = new int[Length];
for (int i = 0; i < Length; i++)
{
Array[i] = i;
cout << Array[i];
}
delete [] Array;
}
int main()
{
const int L = 5;
Print(L);
return 0;
}
编辑:这是基于矢量的正确解决方案:
#include <iostream>
#include <vector>
using namespace std;
void Print(const int Length)
{
vector<int> Array;
Array.resize(Length);
for (int i = 0; i < Length; i++)
{
Array[i] = i;
cout << Array[i];
}
}
int main()
{
const int L = 5;
Print(L);
return 0;
}
答案 1 :(得分:0)
如果您确实要动态分配固定大小的数组,请使用std :: unique_ptr而不是std :: vector。
#include <iostream>
#include <memory>
void Print(const int Length){
std::unique_ptr<int[]> Array = std::make_unique<int[]>(Length);
for (int i = 0; i < Length; ++i){
Array[i] = i;
std::cout << Array[i];
}
Array.reset();
}