c ++中的复杂数组初始化

时间:2014-04-15 22:07:34

标签: c++ arrays

当我想定义复杂数组时出现问题:

#include<complex.h>

int main(){

int matrix=1000;
std::complex<double> y[matrix];

}

错误是&#34;非POD元素类型的可变长度数组&#st; :: complex&#39; 这里的数组定义有问题吗?

5 个答案:

答案 0 :(得分:2)

这种数组只能使用一个常量表达式的长度,即在编译时必须知道长度。

要获取可变长度的数组,请使用std::vector<std::complex<double>> y (matrix);

无论如何,您应该使用std::vector(或在某些情况下为std::array)而不是C风格的数组。

答案 1 :(得分:1)

您无法静态分配大小为常规变量的C ++数组,因为在执行程序之前,matrix的值是未知的。尝试动态分配你的数组:

std::complex<double> y = new std::complex<double>[matrix]

当您使用它时,请致电:

delete[] y

答案 2 :(得分:1)

必须在编译时知道数组的大小。它必须是一个恒定的表达。矩阵的值仅在运行时已知。你必须使矩阵成为一个常数才能工作。

const int matrix=1000;

另一种方法是使用大小可变且在运行时初始化的向量。

int matrix=1000;
std::vector<std::complex<double>> y(matrix);

答案 3 :(得分:1)

C ++不允许variable length arrays,要么动态执行,要么使用vector

答案 4 :(得分:0)

您的编译器认为您声明了一个可变长度数组,因为matrix不是const。只是让它保持不变,事情应该有效:

const int matrix = 1000;
std::complex<double> y[matrix];

错误源于这样一个事实:可变长度数组仅允许用于&#34; dumb&#34;数据类型,例如int / char / void *和structs,但不是std::complex等类。