『"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;
}
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で公開するのが正しいと思われます
回答ありがとございます。そして返信が遅くなりすみません。
2013/05/30 20:52:05もし、よければ教えて頂きたい事があります。
メソッドに引数を渡す場合の定義の記述方法を教えて頂けませんか?
私が使っているテキストは少し古いらしく、定義記述が
メソッド名のあとにコロン(:) 型名と仮引数名を順番に記載する。
そして呼び出し側の記述が
[インスタンス名 メソッド名:引数:引数];
全くの初心者でメソッドに引数を渡す場合の構文が分からず、
どのように記述すれば良いのかわからない状態です。。。
よろしくお願いします。
凄く細かい説明を本当にありがとうございます!!
2013/06/03 12:54:05人生で初のプログラムの勉強で、テキストを読んで、そのテキストの
サンプルを入力している段階で、わからない事ばかりで。。。
本当にありがとうございました!