有一个问题,当我要定义一个复杂的阵列:复杂阵列初始化
#include<complex.h>
int main(){
int matrix=1000;
std::complex<double> y[matrix];
}
的错误是“非POD元素类型‘的std ::复杂’的可变长度数组 是否有有毛病阵列这里的定义
有一个问题,当我要定义一个复杂的阵列:复杂阵列初始化
#include<complex.h>
int main(){
int matrix=1000;
std::complex<double> y[matrix];
}
的错误是“非POD元素类型‘的std ::复杂’的可变长度数组 是否有有毛病阵列这里的定义
你的编译器认为您声明一个变量长度数组,因为matrix
是非const
就让它不断,事情应该工作:?
const int matrix = 1000;
std::complex<double> y[matrix];
该错误源于变长数组仅允许用于“哑”数据类型的事实,例如, int/char/void *和结构,但不是像std::complex
这样的类。
这个问题被标记为C++。不允许任何类型的VLA。 – juanchopanza
这并不是正确的发布错误信息。 – juanchopanza
我不知道MS VC++不支持VLA。他们使用g ++工作,所以如果这就是你需要的目标,他们将会完成这项工作。便利性是否超过便携性问题是另一个问题。 –
您不能静态分配大小为常规变量的C++数组,因为在执行程序之前不知道matrix
的值。尝试动态地分配你的数组:
std::complex<double> y = new std::complex<double>[matrix]
当你用它做,请拨打:
delete[] y
他为什么需要调用'delete []'?我只看到参考类型? –
这种阵列的只有一个长度是一个常量表达式的作品,即编译时必须知道长度。
为了得到一个可变长度的阵列,使用std::vector<std::complex<double>> y (matrix);
你应该(在某些情况下,或std::array
)使用std::vector
对C风格的数组反正。
在编译时必须知道数组的大小。它必须是一个不变的表达。矩阵的值只在运行时才知道。你必须使矩阵不变才能工作。
const int matrix=1000;
另一种解决方法是使用大小可变的矢量,并在运行时初始化。
int matrix=1000;
std::vector<std::complex<double>> y(matrix);
但我也有一行代码为 double yf [matrix]; 和编译器没有给出任何错误。有什么不同? –
C++不允许variable length arrays
,无论这样做动态地,或者使用vector
。
你可能想'',而不是''。 –
chris