匿名質問者

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人10回まで
  • 登録:
  • 終了:2013/06/04 19:19:03

ベストアンサー

匿名回答1号 No.1

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

  • (void)sizeBigger:(int)widthratio heightRatio:(int)heightRatio

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で公開するのが正しいと思われます

匿名質問者

回答ありがとございます。そして返信が遅くなりすみません。
もし、よければ教えて頂きたい事があります。

メソッドに引数を渡す場合の定義の記述方法を教えて頂けませんか?
私が使っているテキストは少し古いらしく、定義記述が
メソッド名のあとにコロン(:) 型名と仮引数名を順番に記載する。
そして呼び出し側の記述が
[インスタンス名 メソッド名:引数:引数];

全くの初心者でメソッドに引数を渡す場合の構文が分からず、
どのように記述すれば良いのかわからない状態です。。。

よろしくお願いします。

2013/05/30 20:52:05
匿名質問者

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

本当にありがとうございました!

2013/06/03 12:54:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません