二維陣列 return 問題 |
答題得分者是:kenlee1109
|
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
請教各位為什麼我二維陣列無法回傳,並出現以下錯誤,
[C Warning] UMain.cpp(270): W8075 Suspicious pointer conversion [C Error] UMain.cpp(270): E2034 Cannot convert 'int ( *)[20]' to 'int' [code cpp] int __fastcall TForm1::WafersNumberCut(AnsiString asSubString) { int iPos,iCount; //============= Search Y-Coordinates Range ============== AnsiString asY_size; int iMaxPos,iMinPos; for(int x=44;x>=0;x--) { asY_size="Y" IntToStr(x); iPos=asSubString.AnsiPos(asY_size); if(iPos==0){ continue; } else if(iPos>0){ iMaxPos=x; break; } } for(int y=-20;y<0;y ) { asY_size="Y" IntToStr(y); iPos=asSubString.AnsiPos(asY_size); if(iPos==0){ continue; } else{ iMinPos=y; break; } } //============= 分割 Y-Coordinates DATA ======================== AnsiString asY_Data,asY_Coordinates[65]; int iLength; iLength=asSubString.Length(); //AnsiLastChar(asSubString); for(int k=iMinPos;k<=iMaxPos;k ) { asY_Data="Y" IntToStr(k) " "; iPos=asSubString.AnsiPos(asY_Data); if(iPos==0){ continue; } else { iPos=iPos asY_Data.Length(); //judge Y-Coordinates whether Exist iCount=0; if(k==iMaxPos){ do{ iCount ; }while((iPos iCount)<=iLength); //judge String Last Position } else{ while(asSubString[iPos iCount]!='Y') {iCount ;} } //Save to Y-20=as[0] ~ Y44=as[64] asY_Coordinates[k 20]=asSubString.SubString(iPos,iCount); } } //==================== 切割成各個整數 =========================== char *cToken,*cNumToken; AnsiString asCut[65][10],asFinalCut[65][20],asCutNumber; int iCutCount1,iCutCount2,iFinalCut[65][20]; int ias1Length,iasPos; for(int a=0;a<65;a ){ if(asY_Coordinates[a].Length()==0){ continue; } else{ iCutCount1=0; cToken=strtok(asY_Coordinates[a].c_str()," "); while(cToken!= NULL){ asCut[a][iCutCount1]=cToken; iCutCount1 ; cToken=strtok(NULL," "); } iCutCount2=0; for(int x=0;x iasPos=asCut[a][x].AnsiPos('/'); if(iasPos==0){ ias1Length=asCut[a][x].Length(); asCutNumber=asCut[a][x].SubString(1,ias1Length); asCut[a][x]=asCut[a][x] "/" asCutNumber; } cNumToken=strtok(asCut[a][x].c_str(),"/"); while(cNumToken!= NULL){ asFinalCut[a][iCutCount2]=cNumToken; asFinalCut[a][iCutCount2]=asFinalCut[a][iCutCount2].TrimRight(); iCutCount2 ; cNumToken=strtok(NULL," "); } } } } for(int i=0;i<=65;i ){ for(int j=0;j<=20;j ){ iFinalCut[i][j]=asFinalCut[i][j].ToInt(); } } return iFinalCut ; } [/code]
------
lee |
kenlee1109
初階會員 發表:20 回覆:40 積分:27 註冊:2006-08-17 發送簡訊給我 |
1.函式傳回值怎會是 int ???你的iFinalCut是宣告成2維陣列,傳出值應該是 int**吧.
2. 你的 iFinalCut[65][20]; 變數是在 function 的堆疊中建立,傳不出去還好,傳出去會變成當機(因 function 離開後這些 local 變數就消失了). 3.改法有 2. 3.1.將iFinalCut變數從呼叫的 function 當參數傳給這個 function, 這樣就不用傳出. 3.2 將 iFinalCut 以 new 的方式建立,並將 function 的傳回值改成 int**. 呼叫的 function 用完後記得 delete. 建議第一種,將 iFinalCut 這個 buffer 當參數傳入為佳也少麻煩. |
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
謝謝大大指導,雖然我還不會用return 方式回傳,但是我已經使用大大說得方法一解決
===================引 用 kenlee1109 文 章=================== 1.函式傳回值怎會是 int ???你的iFinalCut是宣告成2維陣列,傳出值應該是 int**吧. 2. 你的 iFinalCut[65][20]; 變數是在 function 的堆疊中建立,傳不出去還好,傳出去會變成當機(因 function 離開後這些 local 變數就消失了). 3.改法有 2. 3.1.將iFinalCut變數從呼叫的 function 當參數傳給這個 function, 這樣就不用傳出. 3.2 將 iFinalCut 以 new 的方式建立,並將 function 的傳回值改成 int**. 呼叫的 function 用完後記得 delete. 建議第一種,將 iFinalCut 這個 buffer 當參數傳入為佳也少麻煩.
------
lee |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |