首页 > 解决方案 > 崇高文本3中的ISO C++错误中禁止可变长度数组

问题描述

我最近更改了我的 C++ 编译器,我遇到了这个奇怪的错误,说ISO C++ 禁止可变长度数组。我清楚地记得我以前的编译器没有遇到这个错误。这是我编写的代码片段,只是为了检查这个新编译器的可靠性。

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    return 0;
}


In function 'int main()':
test.cpp:8:9: error: ISO C++ forbids variable length array 'a' [-Wvla]
int a[n]={0};

您会看到,即使用户在“n”中输入,编译器也会声明该数组的长度是可变的。 也欢迎对其他编译器版本提出建议!

标签: c++c++11gccc++14iso

解决方案


std::vector替换 VLA :

#include <iostream>
#include <vector>

int main()
{
    int n;
    std::cin>>n;
    std::vector<int> a(n);  // was VLA: int a[n];
    for(int i=0;i<n;i++)
        std::cin>>a[i];
    for(int i=0;i<n;i++)
        std::cout<<a[i]<<" ";
}

推荐阅读