2012-04-17 2 views
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 

을하지만 내 프로그램이 카테고리의 구현 섹션에서 numeratordenominator가 표시되지 않습니다. . 선언되지 않은 식별자 '분자'(분모에 같은)의 오류 "를 사용하여 무엇 내가 뭐하는 거지 잘못된

+1

self.numerator? – lnafziger

답변

5

를 사용하여 속성 대신 직접 인스턴스 변수를 사용하여 :

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

인스턴스 변수가 표시되지 않습니다 Fraction의 인터페이스에서 선언되지 않았기 때문에 귀하의 카테고리에 추가됩니다 - 구현시 이들을 합성 할 때만 생성되므로 프랙 션의 인터페이스에서 인스턴스 변수를 선언하는 다른 가능한 해결책이 있습니다 :

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

@property int numerator, denominator; 

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

@end 
관련 문제