当我想定义复杂数组时出现问题:
#include<complex.h>
int main(){
int matrix=1000;
std::complex<double> y[matrix];
}
错误是&#34;非POD元素类型的可变长度数组&#st; :: complex&#39; 这里的数组定义有问题吗?
答案 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
等类。