2014-04-15 179 views
1

有一個問題,當我要定義一個複雜的陣列:複雜陣列初始化

#include<complex.h> 

int main(){ 

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

} 

的錯誤是「非POD元素類型‘的std ::複雜’的可變長度數組 是否有有毛病陣列這裏的定義

+0

你可能想'',而不是''。 – chris

回答

0

你的編譯器認爲您聲明一個變量長度數組,因爲matrix是非const就讓它不斷,事情應該工作:?

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

該錯誤源於變長數組僅允許用於「啞」數據類型的事實,例如, int/char/void *和結構,但不是像std::complex這樣的類。

+0

這個問題被標記爲C++。不允許任何類型的VLA。 – juanchopanza

+0

這並不是正確的發佈錯誤信息。 – juanchopanza

+0

我不知道MS VC++不支持VLA。他們使用g ++工作,所以如果這就是你需要的目標,他們將會完成這項工作。便利性是否超過便攜性問題是另一個問題。 –

1

您不能靜態分配大小爲常規變量的C++數組,因爲在執行程序之前不知道matrix的值。嘗試動態地分配你的數組:

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

當你用它做,請撥打:

delete[] y

+0

他爲什麼需要調用'delete []'?我只看到參考類型? –

2

這種陣列的只有一個長度是一個常量表達式的作品,即編譯時必須知道長度。

爲了得到一個可變長度的陣列,使用std::vector<std::complex<double>> y (matrix);

你應該(在某些情況下,或std::array)使用std::vector對C風格的數組反正。

1

在編譯時必須知道數組的大小。它必須是一個不變的表達。矩陣的值只在運行時才知道。你必須使矩陣不變才能工作。

const int matrix=1000; 

另一種解決方法是使用大小可變的矢量,並在運行時初始化。

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

但我也有一行代碼爲 double yf [matrix]; 和編譯器沒有給出任何錯誤。有什麼不同? –

1

C++不允許variable length arrays,無論這樣做動態地,或者使用vector