2012-04-17 111 views
2

我的工作包含类别中的一个简单的Objective-C程序Visability。我班的.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 

但我的程序没有看到numeratordenominator在类的实现部分。 。错误“使用未声明的标识符‘分子’(同为分母)的我在做什么错

+1

self.numerator? – lnafziger 2012-04-17 15:15:23

回答

5

使用属性,而不是直接使用高德:

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

的实例变量是不可见您的类别,因为他们没有在分数的接口中声明的 - 当你在实施@synthesize他们他们只创造了通向其他可能的解决方案,这是分数的接口来声明实例变量:

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

@property int numerator, denominator; 

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

@end