c++ - 崇高文本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”中输入,编译器也会声明该数组的长度是可变的。 也欢迎对其他编译器版本提出建议!
解决方案
用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]<<" ";
}
推荐阅读
- winforms - 使用脚本 powershell 自行删除文件夹
- python - 将嵌套的 for 循环转换为列表 comp 并从结果列表中过滤完美的正方形
- c++ - 如何使用 libCurl 将访问令牌发送到服务器 API
- java - 由于 firebaseAuth.getUid() 的 Null 指针异常,我的应用程序崩溃
- javascript - 如何在嵌套数组中实现多字段更新
- python - Gunicorn.service 的两个域
- ruby-on-rails - Rails 5.2 简单形式的 Lambda 函数
- bash - 从 C 中的 shell 脚本重新创建 if/then 块以用于 shell 脚本
- javascript - 需要组件与导入组件?
- swift - 扩展字素集群 - Swift