線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3957
推到 Plurk!
推到 Facebook!

二維陣列 return 問題

答題得分者是:kenlee1109
small7011
一般會員


發表:19
回覆:34
積分:10
註冊:2007-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-27 12:06:36 IP:211.20.xxx.xxx 訂閱
請教各位為什麼我二維陣列無法回傳,並出現以下錯誤,

[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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-27 12:58:32 IP:118.160.xxx.xxx 訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-27 18:40:45 IP:211.20.xxx.xxx 訂閱
謝謝大大指導,雖然我還不會用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
系統時間:2024-04-25 10:04:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!