有一個問題,當我要定義一個複雜的陣列:複雜陣列初始化
#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