C++ 错误C3863:数组类型';双[长度]和#x27;不可转让

C++ 错误C3863:数组类型';双[长度]和#x27;不可转让,c++,visual-c++,c++17,C++,Visual C++,C++17,在WindowsMSVC中,我试图编译以下代码 void foo(std::vector<double> &bar){ const long int length = bar.size(); double a[length]; //error C3863: array type 'double [length]' is not assignable for(int i=0; i < length; i++){ a[i]=0.0;

在WindowsMSVC中,我试图编译以下代码

void foo(std::vector<double> &bar){
    const long int length = bar.size();
    double a[length]; //error C3863: array type 'double [length]' is not assignable
    for(int i=0; i < length; i++){
        a[i]=0.0;
    }
    //do some other things
}
然后我得到了“错误C3863:数组类型'double[length]'不可赋值”


为什么不同?如何消除错误?

代码>双a[长度]不是可移植的C++,因为可变长度数组不是由语言实现的。
std::vector<double> a(bar.size());
std::向量a(bar.size());

这是替代品。请注意,元素将被初始化为零,因此您可以删除初始化循环。

代码>双a[长度]不是可移植的C++,因为可变长度数组不是由语言实现的。
std::vector<double> a(bar.size());
std::向量a(bar.size());

这是替代品。请注意,元素将被初始化为零,因此您可以删除初始化循环。

double a[length]是一个(不包括在标准C++中)。将
a
a
std::vector
改为:
std::vector a(bar.size())现在将做您正在尝试做的,但是使用标准C++。它还有一个额外的好处,即您不需要在之后将所有值设置为
0.0
不是合法C++,XCode误导了你。数组边界必须是编译时常量,
length
是一个变量。使用“<代码> STD::向量< /代码>”。一些C++编译器将VLA作为扩展。MSVC不是其中之一。我建议您在从xcode编译时添加
-Wall-Wextra-pedantic-pedantic错误
,以避免在尝试使用其他编译器编译程序时遇到这样的意外是一个(不包括在标准C++中)。将
a
a
std::vector
改为:
std::vector a(bar.size())现在将做您正在尝试做的,但是使用标准C++。它还有一个额外的好处,即您不需要在之后将所有值设置为
0.0
不是合法C++,XCode误导了你。数组边界必须是编译时常量,
length
是一个变量。使用“<代码> STD::向量< /代码>”。一些C++编译器将VLA作为扩展。MSVC不是其中之一。我建议您在从xcode编译时添加
-Wall-Wextra-pedantic-pedantic错误
,以免在尝试使用其他编译器编译程序时遇到类似的意外情况。