1

私が読んでいる本の中で、彼はメインファイルでカテゴリを作成する方法を説明していますが、別のファイルでこれを行う方法を理解しようとしています..

「MathOperations」という Fraction クラスのカテゴリを作成したいので、Fraction+MathOperations という名前の新しい .h と .m を開きました。これが規則であることはわかっているからです。

Fraction.hです

#import "Fraction.h" 

@interface Fraction : NSObject

@property int numerator, denumerator;

-(void) print: (BOOL) test;
-(void) setTo: (int) n over: (int) d;
-(void) reduce;
-(double) convertToNum;
-(id) addFrac:(id)f;
-(void) justPrint;
-(id) initWith:(int)n over:(int)f;
+(Fraction *) allocF;
+(int) count;
+(int) gCounter;

@end

Fraction+MathOperations.h

#import "Fraction.h"

@interface Fraction (MathOperations)

-(Fraction *) add: (Fraction *) f;
-(Fraction *) substract: (Fraction *) f;
-(Fraction *) multiply: (Fraction *) f;
-(Fraction *) divide: (Fraction *) f;

@end

Fraction+MathOperations.m

    #import "Fraction.h"

@implementation Fraction (MathOperations)

-(Fraction *)add:(Fraction *)f
{
    extern int gCounter;
    Fraction *result = [[Fraction alloc] init];

    result.numerator = numerator * f.denumerator + denumerator * f.numerator;
    result.denumerator = denumerator * f.denumerator;
    [result reduce];
    ++gCounter;
    return result;

}


-(Fraction *)substract:(Fraction *)f
{
    Fraction *result = [[Fraction alloc] init];

    result.numerator = numerator * f.denumerator - denumerator * f.numerator;
    result.denumerator = denumerator * f.denumerator;
    //[result reduce];
    return result;
}


-(Fraction *)multiply:(Fraction *)f
{
    Fraction *result = [[Fraction alloc] init];

    result.numerator = numerator * f.numerator;
    result.denumerator = denumerator * f.denumerator;
    //[result reduce];
    return result;
}

-(Fraction *)divide:(Fraction *)f
{
    Fraction *result = [[Fraction alloc] init];

    result.numerator = numerator * f.denumerator;
    result.denumerator = denumerator * f.numerator;
    //[result reduce];
    return result;
}

@end

明らかに、変数が宣言されていないという一連のエラーが発生するため、何か間違ったことを宣言しています..また、元の Fraction クラスで新しいインターフェイスと実装を宣言する方が合理的ですか?

エラー:

Fraction クラスには、「numerator」と「denumerator」というプロパティがありますが、それらは meth 実装ファイル tnx で宣言されていないようです

4

3 に答える 3

3

各メイン クラスのプロパティのself.ように、プレフィックスを使用する必要があります。self.numeratorカテゴリには、プロパティへの「内部」アクセス権がなく、外部ユーザーのように動作します。

于 2013-02-18T12:31:43.643 に答える
1

私は単にこれを変更すると思います:

#import "Fraction.h"

これに:

#import "Fraction+MathOperations.h"

Fraction+MathOperations.mトリックを行います。

于 2013-02-18T12:26:45.480 に答える