0

私は客観的で初めてで、単純な概念を理解しようとしています。ダミー用のObjective CとMac OSX用のCocoa Programming(ほとんど)を読みました。私は自分で簡単な小さなプログラムを作成しようとしましたが、ほとんど知識がないことに気付きました。

エラーが発生し続け"Use of Undeclared Identifier "calculateAge', did you mean 'Calculate' "ます。

以下のコードの何が問題なのか、その理由を教えてください。事前にたくさんありがとう。

#import <Foundation/Foundation.h>


@interface Calculate : NSObject
{
    int myYear;
    int nowYear;
}


- (int) calculateAge:(int)birthYear:(int)nowYear;

@end



@implementation Calculate



- (int) calculateAge:(int)birthYear:(int)nowYear// need myYear
{

    NSLog(@"The birthYear is: %i\n", birthYear);
    int myAge = nowYear - birthYear;        
    //NSLog(@"The nowYear is: %i\n", nowYear);
    NSLog(@"The age is: %i\n", myAge);
    return myAge;
}



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

    @autoreleasepool {


        NSLog(@"Hello, World!");
        int myY = 1963;
        int nowY = 2012;
        int myYear = 1963;
        int nowYear = 2012;
        //int myAge = calculateAge:(int) birthYear: (int) nowYear;
        int myAge = calculateAge:(int) myY: (int) nowY;
        NSLog(@"The nowYear is: %i\n", nowYear);
        NSLog(@"The age is: %i\n", myAge);

    }
    return 0;
}
@end
4

2 に答える 2

1

メソッド名とパラメーターリストを混同しているようです。適切な署名は次のようになります。

- (int)calculateAgeFromBirthYear:(int)birthYear currentYear:(int)currentYear

これは、次のように実装できます。

- (int)calculateAgeFromBirthYear:(int)birthYear currentYear:(int)currentYear
{

    NSLog(@"The birthYear is: %i\n", birthYear);
    int myAge = currentYear - birthYear;        
    //NSLog(@"The nowYear is: %i\n", currentYear);
    NSLog(@"The age is: %i\n", myAge);
    return myAge;
}

これは、次のように呼び出すことができます。

Calculate *calculator = [[Calculate  alloc] init];
int myAge = [calculator calculateAgeFromBirthYear:myY currentYear:nowY];

mainクラス実装内に実装しないでください。グローバル名前空間の外部に属し、できれば独自のファイルに属します。

于 2012-10-17T17:29:06.763 に答える
0

インターフェイスでインスタンス変数を宣言する必要はありません。
最後@endはメイン関数の前にある必要があります。これはクラスの一部ではなく、クラスを使用していました。クラスをインスタンス化する必要があり、インスタンス化されたクラスに対して呼び出しを行う必要があります
。各引数を示すために、メソッドの名前を変更する必要があります 。 変数には完全な名前を付ける必要があります。略語を使用すると、一般的に物事がわかりにくくなります。Calculate
calculateAge...

次に例を示します。

@interface Calculate : NSObject
- (int) calculateAgeWithBirthYear:(int)birthYear nowYear:(int)nowYear;
@end

@implementation Calculate
- (int) calculateAgeWithBirthYear:(int)birthYear nowYear:(int)nowYear// need myYear
{
    NSLog(@"The birthYear is: %i\n", birthYear);
    int myAge = nowYear - birthYear;
    NSLog(@"The age is: %i\n", myAge);
    return myAge;
}
@end

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

        NSLog(@"Hello, World!");

        int myBirthYear = 1963;
        int nowYear = 2012;

        Calculate *calculator = [[Calculate alloc] init];
        int myAge = [calculator calculateAgeWithBirthYear:myBirthYear nowYear:nowYear];

        NSLog(@"The nowYear is: %i\n", nowYear);
        NSLog(@"The age is: %i\n", myAge);

    }
    return 0;
}

NSLog 出力:

こんにちは世界!
生年:1963年
年齢:49歳
現在:2012年
年齢:49歳

`@property~ ステートメントによって作成されたインスタンス変数を使用する:

@interface Calculate : NSObject
@property int myYear;
@property int nowYear;

- (int) calculateAge;
@end

@implementation Calculate
- (int) calculateAge // need myYear
{
    NSLog(@"The birthYear is: %i\n", self.myYear);
    int myAge = self.nowYear - self.myYear;
    NSLog(@"The age is: %i\n", myAge);
    return myAge;
}
@end

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

        NSLog(@"Hello, World!");

        Calculate *calculator = [[Calculate alloc] init];
        calculator.myYear = 1963;
        calculator.nowYear = 2012;

        int myAge = [calculator calculateAge];

        NSLog(@"The nowYear is: %i\n", calculator.nowYear);
        NSLog(@"The age is: %i\n", myAge);

    }
    return 0;
}
于 2012-10-17T17:34:29.020 に答える