全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:8443
推到 Plurk!
推到 Facebook!

c++的retrun可以回傳二個值嗎

答題得分者是:anpino
aamihcom
一般會員


發表:57
回覆:40
積分:19
註冊:2003-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-17 00:32:34 IP:203.204.xxx.xxx 未訂閱
int __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob) { AnsiString tOpClass; .... .... return 0; } 請問類似以上之副程式有辨法回傳二個值嗎,好像一般都只能回傳單一值,不過有時候要回傳二個值c 可以嗎?謝謝
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-17 08:27:57 IP:211.23.xxx.xxx 未訂閱
有2個方法:    1.將回傳值合併成一個structure, 回傳structure即可。 2.將回傳值以reference或pointer的方式加入參數之中,   如: function (int& ReturnValue1,int* ReturnValue2); 在function中將要回傳的值丟給Returnalue參數即可。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D ------------------------------- 發表人 - anpino 於 2004/05/17 08:50:58
aamihcom
一般會員


發表:57
回覆:40
積分:19
註冊:2003-10-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-27 21:37:11 IP:211.23.xxx.xxx 未訂閱
1.將回傳值合併成一個structure, 回傳structure即可。 第一種方法我不太了解,請版主幫我解答一下.... 是否在宣告時就應該改變了 int __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob) 因為我試不出來
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-28 08:29:07 IP:211.23.xxx.xxx 未訂閱
引言: 1.將回傳值合併成一個structure, 回傳structure即可。 第一種方法我不太了解,請版主幫我解答一下.... 是否在宣告時就應該改變了 int __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob) 因為我試不出來
假設您要回傳int ReturnValue1與int ReturnValue2, 那麼就宣告一個structure :
struct ReturnValues
{
  int ReturnValue1;
  int ReturnValue2;
};    1)
int __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob, ReturnValues& stuReTest)
{
  stuReTest.ReturnValue1 = 1; // 寫入您要的值
  stuReTest.ReturnValue1 = 2; 
 ...
}    2)
ReturnValues __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob)
{
   ReturnValues stuReTest;        stuReTest.ReturnValue1 = 1; // 寫入您要的值
   stuReTest.ReturnValue1 = 2; 
  ...
   return stuReTest;
}    
------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Anpinos Middle Earth http://anpino.hp.infoseek.co.jp/ -------------------------------
adem921
一般會員


發表:1
回覆:3
積分:0
註冊:2004-05-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-28 18:29:44 IP:203.187.xxx.xxx 未訂閱
用RETURN不可已傳兩個值的 除非 IF A ELSE IF B 要傳回兩個值一定要用指標 int *ptr1,*ptr2; 指標前面有*剛學到指標^_^
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-31 08:42:12 IP:211.23.xxx.xxx 未訂閱
引言: 用RETURN不可已傳兩個值的 除非 IF A ELSE IF B 要傳回兩個值一定要用指標 int *ptr1,*ptr2; 指標前面有*剛學到指標^_^
adem921您好: 看您是新手(因為只學到指標), 所以雞婆的告訴你一個觀念: 1個function只能回傳一個物件,或者物件的指標, 也就是說, 它可以回傳int,long,string,class,structure,int*,long*,...等等, 而不單單只是回傳一個值而已。 所以, 可以用上面提到的2個方法來實現回傳多個值: (MSDN也常常出現這種用法。) 1.將回傳值合併成一個structure, 回傳structure即可。 2.將回傳值以reference或pointer的方式加入參數之中。 請仔細看清楚上面的說明, 這2個方法可以實現"回傳多個值"。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Anpinos Middle Earth http://anpino.hp.infoseek.co.jp/ ------------------------------- 發表人 - anpino 於 2004/05/31 16:29:08
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-31 14:18:08 IP:140.121.xxx.xxx 未訂閱
anpino 大大給你拍拍手~~
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-31 16:39:44 IP:211.23.xxx.xxx 未訂閱
引言: anpino 大大給你拍拍手~~ < face="Verdana, Arial, Helvetica"> arisaka_matsuri : 謝謝啦~~~ (揮手帕) 不過這段對話跟題目沒關係耶...(踢飛) 我只是比較了解 >)
aamihcom
一般會員


發表:57
回覆:40
積分:19
註冊:2003-10-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-09 18:39:26 IP:211.23.xxx.xxx 未訂閱
版主大大不好意思,我再問一個問題~~    A.將這段加入 FormInterViewAsk.h裡的這個地方 private: struct ReturnValues {   int ReturnValue1;   int ReturnValue2; }; int __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob, ReturnValues& stuReTest) {   stuReTest.ReturnValue1 = 1; // 寫入您要的值   stuReTest.ReturnValue1 = 2;  }    B.將這段加入 FormInterViewAsk.CPP裡 ReturnValues __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob) {    ReturnValues stuReTest;        stuReTest.ReturnValue1 = 1; // 寫入您要的值    stuReTest.ReturnValue1 = 2;     return stuReTest; } 測試結果有錯誤~我不曉得是那邊出了問題,基本上這些程式碼應該是都沒問題才對...(我有看過了),是否我所加入的位置有誤,請版主指導一下
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-06-14 08:32:20 IP:211.23.xxx.xxx 未訂閱
引言: 版主大大不好意思,我再問一個問題~~ A.將這段加入 FormInterViewAsk.h裡的這個地方 private: struct ReturnValues { int ReturnValue1; int ReturnValue2; }; 下面2個都是function, 選一個加入cpp即可。 1) int __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob, ReturnValues& stuReTest) { stuReTest.ReturnValue1 = 1; // 寫入您要的值 stuReTest.ReturnValue1 = 2; } //如果你要加入這一個, 那麼在 FormInterViewAsk.h檔裡TFormInterViewAsk 的public區宣告 int __fastcall GetSalaryAdd(AnsiString tAskJob, ReturnValues& stuReTest); 即可 2) ReturnValues __fastcall TFormInterViewAsk::GetSalaryAdd(AnsiString tAskJob) { ReturnValues stuReTest; stuReTest.ReturnValue1 = 1; // 寫入您要的值 stuReTest.ReturnValue1 = 2; return stuReTest; } //如果你要加入這一個, 那麼在 FormInterViewAsk.h檔裡TFormInterViewAsk 的public區宣告 int __fastcall GetSalaryAdd(AnsiString tAskJob); 即可
------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Anpinos Middle Earth http://anpino.hp.infoseek.co.jp/ -------------------------------
Erniel
一般會員


發表:1
回覆:1
積分:0
註冊:2006-08-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2006-07-21 14:03:26 IP:211.74.xxx.xxx 未訂閱

測試很久 但結果都不理想 我是使用第二種方式 寫在Class 裡的函式
我想達到的目的: 在 Unit 運用此Class 函式達到 傳回 兩各值

ReturnValues q;
q.ReturnValue1=IP->Connect(Bmp).ReturnValue1;
q.ReturnValue2=IP->Connect(Bmp).ReturnValue2;

第一步.ImgClass.h裡的這個地方
private: struct ReturnValues { int ReturnValue1; int ReturnValue2; };
第二步.ImgClass.h裡的這個地方
public區宣告:int __fastcall Connect(Graphics::TBitmap*Bmp);
第三步.ImgClass.cpp
ReturnValues __fastcall ImageClass::Connect(Graphics::TBitmap*Bmp)
{
.....
ReturnValues stuReTest;
stuReTest.ReturnValue1 = Center_x; // 寫入您要的值
stuReTest.ReturnValue1 = Center_y;
return stuReTest;
}
第四步.在使用Class的Unit.h中
private宣告: struct ReturnValues { int ReturnValue1; int ReturnValue2; };

有幾各問題需要麻煩大家幫我解答 第二步和第三步 明明是同一個函式 為何資料型態卻不一樣
編碼時 只能接受 int q=IP->GetSalaryAdd(Bmp); (不能達到我要的兩各傳回值) 此型態
並執行有error : Declaration syntax error

第二步改回.ImgClass.h裡的這個地方
public區宣告:ReturnValues__fastcall Connect(Graphics::TBitmap*Bmp);
第三步.ImgClass.cpp
ReturnValues __fastcall ImageClass::Connect(Graphics::TBitmap*Bmp)
{...}

程式能接受此寫法
ReturnValues q;
q.ReturnValue1=IP->Connect(Bmp).ReturnValue1;
q.ReturnValue2=IP->Connect(Bmp).ReturnValue2;

同樣有error : Declaration syntax error 宣告錯誤
請問各位大大 問題是出在哪裡???

系統時間:2024-04-20 11:21:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!