2

私は、カテゴリを含む1つの単純なObjective-cプログラムに取り組んでいます。私のクラス.h:

#import <Foundation/Foundation.h>

@interface Fraction : NSObject

@property int numerator, denominator;

-(void)setNumerator:(int)n andDenominator:(int)d;

@end

numerator.mファイルで、とを合成しdenominatorました。main.m私のクラスの作成されたカテゴリFraction

#import "Fraction.h"    
@interface Fraction (MathOps)
-(Fraction *) add: (Fraction *) f;
@end

@implementation Fraction (MathOps)
-(Fraction *) add: (Fraction *) f
{
    // To add two fractions:
    // a/b + c/d = ((a*d) + (b*c)) / (b * d)
    Fraction *result = [[Fraction alloc] init];
    result.numerator = (numerator * f.denominator) +
    (denominator * f.numerator);
    result.denominator = denominator * f.denominator;
    [result reduce];
    return result;
}
@end

しかし、私のプログラムは、カテゴリの実装セクションに表示numeratorされません。denominatorエラー「宣言されていない識別子「分子」の使用(分母も同じ)。何が間違っているのですか?

4

1 に答える 1

5

ivarsを直接使用する代わりに、プロパティを使用します。

result.numerator = (self.numerator * f.denominator) + (self.denominator * f.numerator);
result.denominator = self.denominator * f.denominator;

インスタンス変数は、Fractionのインターフェースで宣言されていないため、カテゴリには表示されません。実装で@synthesizeした場合にのみ作成されます。これは、Fractionのインターフェースでインスタンス変数を宣言するという他の可能な解決策につながります。

@interface Fraction : NSObject {
    int numerator;
    int denominator;
}

@property int numerator, denominator;

-(void)setNumerator:(int)n andDenominator:(int)d;

@end
于 2012-04-17T15:15:28.930 に答える