[問題] 請教陣列事先定義的問題。

看板C_and_CPP (C/C++)作者 (#酷拔#)時間16年前 (2010/03/17 14:00), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
小弟原本是用DEV C++在寫程式的,但是老師最近要接計畫需要用到visual c++ 但是我把原本的程式轉到visual c++之後,陣列的定義卻出現下列問題。 舉例其中一個陣列出現的問題: C2057: 必須是常數運算式 C2466: 無法配置常數大小為 0 的陣列,常數必須為大於 0 的整數 C2087: 'flag' : 遺漏註標 C2133: 'flag' : 未知的大小 原本的程式碼是要用switch依照丟進去不同的資料,參數也不一樣,如下列所示: int max_cycle,NumCat,Dim,SMP; string dataset; int set,auto_machine; for(auto_machine=1;auto_machine<=8;auto_machine++) { cout<<"auto:"<<auto_machine<<endl; switch (auto_machine) { case 1: NumCat=40; max_cycle=150; SMP=5; break; case 2: NumCat=20; max_cycle=100; SMP=5; break; .....其他case..... } for(set=1;set<=15;set++) { switch(set) { case 1: dataset= "1-German.txt"; Dim=25; break; case 2: dataset= "2-Australian.txt"; Dim=15; break; .....其他case..... } 接著開始/*變數宣告*/ int flag[NumCat][Dim]; ...等等,類似這種的宣告..... 之後就會出現一開始所說的那些錯誤了,但是之前在DEV C++都不會有這種錯。 還有類似這種用迴圈去累加一個值,再把他丟入陣列中的程式也會出錯。 主要這行 int count_test_column=0; for(k=0;k<(count_column/max_kfold);k++) { //cout<<"k: "<<k<<endl; 主要這行 count_test_column+=1; fout2<<Data2D[k][Dim-1]<<" "; for(j=0;j<(Dim-1);j++) { if(flag[i][j]==1)fout2<<j+1<<":"<<Data2D[k][j]<<" "; } fout2<<endl; } 主要這行宣告時 double predict[count_test_column]; 就會出現上面寫說必須是常數運算式...ETC的那些錯誤。 總結就是要怎麼在visual c++裡,陣列擺DIM這種讓它覺得是常數運算式的值。 有勞各位幫我解答一下,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.141.35.42

03/17 14:07, , 1F
double* predict = new double[count_test_column];
03/17 14:07, 1F

03/17 14:09, , 2F
flag也是; 基本上直接以變數宣告array長度是C語言新的
03/17 14:09, 2F

03/17 14:10, , 3F
feature VLA, C++似乎不是標準, 要用額外的編譯參數@_@"
03/17 14:10, 3F

03/17 15:59, , 4F
因為要這樣變數必須是const 但是這樣你就不能改變數了
03/17 15:59, 4F

03/17 16:00, , 5F
如果要按照你的需求 就得動態new了
03/17 16:00, 5F
文章代碼(AID): #1Be700o5 (C_and_CPP)
文章代碼(AID): #1Be700o5 (C_and_CPP)