人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Xcode4.6.2で下記プログラムを入力すると
『"widthratio"use as the name of the previous parameter rather than as part of the selector』とMessageが出てしまいます。
どのように変更すれば良いのでしょうか。

#import <Foundation/Foundation.h>

@interface Sankaku : NSObject
{
@public
int teihen;
int takasa;
}

@end

@implementation Sankaku

-(float)getAreaOfTriangle
{
return (float)teihen * (float)takasa /2;
}

-(void)sizeBigger:(int)widthratio:(int)heightRatio
{
teihen *=widthratio;
takasa *=heightRatio;
return;
}
@end

int main(int argc, const char * argv[])
{

@autoreleasepool {

// insert code here...

Sankaku *sankaku_A=[[Sankaku alloc]init];

sankaku_A->teihen=6;
sankaku_A->takasa=4;

[sankaku_A sizeBigger:2 :3];

NSLog(@"三角形Aの底辺は%d高は%dです",sankaku_A->teihen,sankaku_A->takasa);
NSLog(@"三角形Aの面積は%fです",[sankaku_A getAreaOfTriangle]);



}
return 0;
}


●質問者: 匿名質問者
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号
ベストアンサー

2つ目以降の引数は名前を付けてやらないとだめです

http://xochique.blog.fc2.com/blog-entry-15.html

稼働確認したものを転記します。

#import <Foundation/Foundation.h>

@interface Sankaku : NSObject
{
@public
 int teihen;
 int takasa;
}
-(void)sizeBiggerWithWidthRatio:(int)p1 AndHeightRatio:(int)p2;

@end

@implementation Sankaku

-(float)getAreaOfTriangle
{
 return (float)teihen * (float)takasa / 2;
}

-(void)sizeBiggerWithWidthRatio:(int)widthRatio AndHeightRatio:(int)heightRatio
{
 teihen *= widthRatio;
 takasa *= heightRatio;
 return;
}
@end

int main(int argc, const char * argv[])
{
 
 @autoreleasepool {
 
 // insert code here...
 
 Sankaku *sankaku_A = [[Sankaku alloc]init];
 
 sankaku_A->teihen = 6;
 sankaku_A->takasa = 4;
 
 [sankaku_A sizeBiggerWithWidthRatio:2 AndHeightRatio:3];
 
 NSLog(@"三角形Aの底辺は%d高は%dです",sankaku_A->teihen,sankaku_A->takasa);
 NSLog(@"三角形Aの面積は%fです",[sankaku_A getAreaOfTriangle]);
 
 }
 return 0;
}

まず、オブジェクトのメソッドがメッセージを受け取るためには
@interfaceで外部公開しなければいけません

普通は実装と同じにしますが変数名は実装側(impl)の問題で
インターフェース上は重要ではないということを示すため変えてみました
引数名

メソッドの呼び出しが英語の文になるように設計するのが流儀です
(そのせいで冗長になるのですが・・・)
メソッド名というよりは

- 呼び出し側で記述する名前1:(型)メソッド内部変数名1 呼び出し側で記述する名前2:(型)メソッド内部変数名2 ・・・

が続くと考えてください

あと、
int teihen;
int takasa;
はこの場合@propertyで公開するのが正しいと思われます


匿名質問者さんのコメント
回答ありがとございます。そして返信が遅くなりすみません。 もし、よければ教えて頂きたい事があります。 メソッドに引数を渡す場合の定義の記述方法を教えて頂けませんか? 私が使っているテキストは少し古いらしく、定義記述が メソッド名のあとにコロン(:) 型名と仮引数名を順番に記載する。 そして呼び出し側の記述が [インスタンス名 メソッド名:引数:引数]; 全くの初心者でメソッドに引数を渡す場合の構文が分からず、 どのように記述すれば良いのかわからない状態です。。。 よろしくお願いします。

匿名質問者さんのコメント
凄く細かい説明を本当にありがとうございます!! 人生で初のプログラムの勉強で、テキストを読んで、そのテキストの サンプルを入力している段階で、わからない事ばかりで。。。 本当にありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ