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