2012-04-17 6 views
2

私はカテゴリを含む簡単なobjective-cプログラムに取り組んでいます。私のクラスの.h:.Mファイルでカテゴリ。変数の可視性

#import <Foundation/Foundation.h> 

@interface Fraction : NSObject 

@property int numerator, denominator; 

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

@end 

は、私は私のnumeratordenominatorを合成しました。 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 

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

+1

self.numerator? – lnafziger

答えて

5

代わりに直接アイバーズを使用してのプロパティを使用します。?インスタンス変数が表示されていない

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