引数のout 修飾子についての質問です

230 views
Skip to first unread message

oyasu

unread,
Nov 26, 2010, 6:59:03 AM11/26/10
to cocoa-dev-japan, fu...@ise-dwave.com
Objective-C初心者です。 引数のout 修飾子についての質問です。

メソッドの引数out修飾子(?)を使って呼び出し側にメソッド内の結果を戻したいのですが、、うまくいきません何故だかよくわかりません。
(ちなみに戻り値で(NSString *)型で受取りは予測した結果で戻ります。)
(MSVisualSutudio C++ではうまくいきました。)

呼び出し側:
[self Set_SoundFile:strSndFile];
Argo_strSndFile =strSndFile;
の実行後「"MySong3"」が戻って来る予定が""となってしまいます。

よろしくご指導お願いします。

*******以下【SampleCode開始】****************************
プロトタイプ宣言:
====================================
-(bool)Set_SoundFile:(out NSString *)Argo_strSndFile;

実装:
====================================
呼び出し側:
----------------------------------------------
NSString *strSndFile=@"";
[self Set_SoundFile:strSndFile];
//<<=ここで正常な「"MySong3"」が戻ってこない!?
Argo_strSndFile =strSndFile;

呼ばれる側:
-------------------------------------------------
-(bool)Set_SoundFile:(out NSString *)Argo_strSndFile
{
NSString *SND_FILE =@"MySong3";

Argo_strSndFile =SND_FILE;

return true;
}

*********以上【SampleCode終了】***********************************

wang

unread,
Nov 28, 2010, 2:44:52 AM11/28/10
to cocoa-dev-japan
out修飾子を使う目的がわかりませんが、以下ではいけませんか?

プロトタイプ宣言:
====================================
-(bool)Set_SoundFile:(NSString **)Argo_strSndFile;

実装:
====================================
呼び出し側:
----------------------------------------------
NSString *strSndFile=@"";
[self Set_SoundFile:&strSndFile];

呼ばれる側:
-------------------------------------------------
-(bool)Set_SoundFile:(NSString **)Argo_strSndFile
{
NSString *SND_FILE =@"MySong3";

*Argo_strSndFile = SND_FILE;

return true;

Makoto Nukui

unread,
Nov 28, 2010, 4:56:57 PM11/28/10
to cocoa-d...@googlegroups.com
GNUE(鵺)です。


 out修飾子は使ったことがないのでよくはわかりませんが、下記のサイトを見ると形式プロトコル内でメソッドを
 宣言するときにしか使用できないようです。

  http://developer.apple.com/jp/documentation/cocoa/conceptual/objectivec/Articles/chapter_13_section_8.html


 それと、どうやらリモートメッセージング(分散オブジェクト)のための宣言みたいですね。

> --
> このグループから退会するには、次へメールをお送りください。
> cocoa-dev-jap...@googlegroups.com
> その他のオプションについては以下にアクセスしてください。
> http://groups.google.com/group/cocoa-dev-japan

--
GNUE(鵺)

blue_field

unread,
Nov 29, 2010, 12:03:49 AM11/29/10
to cocoa-dev-japan
初心者が分散オブジェクトを使いたがっているとは思えないので
単に、引数で値を返す方法を書きます

メソッドの実装
- (void)getString:(NSString**)string andNumber:(NSInteger*)number
{
*string = @"Test";
*number = 10;
}


呼び出し元

NSString* string = nil;
NSInteger number = 0;
[self getString:&string andNumber:&number];
NSLog(@"string = %@, number = %d", string, number);

なぜ、これで値が返るかという説明は
「c言語 ポインタ渡し」で調べれば、分かると思います

yasu fuji

unread,
Jan 12, 2011, 8:33:54 AM1/12/11
to cocoa-d...@googlegroups.com
Wangさん Makoto Nukui さん blue_field さん 
皆様有難うございます。

返信&アドバイスへの御礼遅くなり誠に申し訳ございません。
質問させて頂いた直後に、私の身内に不幸があり、喪主をする事になり、1ヶ月があっという間に過ぎてしまい。
MAC-PC やObject-Cを触る暇と気持ちの余裕が無くて、アドバイスメールを頂いていた事に気が付かず申し訳ございませんでした。

out修飾子は分散Objectで使うものなのですネ。
VBの引数Byrefと同じ感じで使えるものだと思っていました。

大変勉強になりました。
アドバイス頂いた御3名様には、重ね重ね有難うございました。



Reply all
Reply to author
Forward
0 new messages