2

我正在开发一个包含类别的简单objective-c 程序。我的课.h:

#import <Foundation/Foundation.h>

@interface Fraction : NSObject

@property int numerator, denominator;

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

@end

在 .m 文件中,我合成了我的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

但是我的程序在类别的实现部分中没有看到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 回答