黑马程序员技术交流社区

标题: 分类调用属性出现“use of undeclared identifier” [打印本页]

作者: gclforios    时间: 2015-6-17 16:11
标题: 分类调用属性出现“use of undeclared identifier”
本帖最后由 gclforios 于 2015-6-17 16:18 编辑

基类接口文件

  1. #import <Foundation/Foundation.h>

  2. @interface Fraction : NSObject

  3. @property (nonatomic ) int numerator,denominator;

  4. -(void)setTo:(int) n over:(int) d;

  5. -(void)reduce;//约分
  6. -(NSString *)description;//显示方法重写


  7. @end
复制代码

基类的实现文件

  1. #import "Fraction.h"

  2. @implementation Fraction

  3. @synthesize  numerator,denominator;

  4. -(void)setTo:(int) n over:(int) d
  5. {
  6.     numerator =n;
  7.     denominator=d;
  8. }
  9. -(void)reduce
  10. {
  11.     int u=numerator;
  12.     int v=denominator;
  13.     int temp;
  14.    
  15.     while (v!=0)
  16.     {
  17.         temp=u%v;
  18.         u=v;
  19.         v=temp;
  20.     }
  21.     numerator/=u;
  22.     denominator/=u;
  23. }

  24. -(NSString *)description
  25. {
  26.     [self reduce];
  27.     return [NSString stringWithFormat:@"%d/%d",numerator,denominator];
  28. }
  29. @end
复制代码


为其添加分类单独放在一个文件中

  1. #import "Fraction.h"

  2. //实现Fraction的分类
  3. @interface Fraction (MathOps)

  4. //+
  5. -(Fraction *)add:(Fraction *)f;
  6. //X
  7. -(Fraction *)mul:(Fraction *)f;
  8. //-
  9. -(Fraction *)sub:(Fraction *)f;
  10. //约分
  11. -(Fraction *)div:(Fraction *)f;

  12. @end


  13. //实现部分
  14. @implementation Fraction (MathOps)


  15. //将两个分数相加
  16. //a/b+c/d=(a*d)+(b*C)/db
  17. -(Fraction *)add:(Fraction *)f
  18. {
  19.     //定义临时变量
  20.     Fraction *result=[Fraction new];
  21.    
  22.     result.numerator=numerato*f.denominator)+(denominator*f.numerator);
  23.     result.denominator=denominator*f.denominator;
  24.    
  25.     [result reduce];
  26.    
  27.     return result;
  28.    
  29. }
  30. //X
  31. -(Fraction *)mul:(Fraction *)f
  32. {
  33.    
  34. }
  35. //-
  36. -(Fraction *)sub:(Fraction *)f
  37. {
  38.    
  39. }
  40. //约分
  41. -(Fraction *)div:(Fraction *)f
  42. {
  43.    
  44. }
  45. @end
复制代码



问题:为啥分类中    result.numerator=numerato*f.denominator)+(denominator*f.numerator);的出现use of undeclared identifier提示,我不是已经包含基类.h文件了吗?
作者: gclforios    时间: 2015-6-17 16:23
我明白了,我把定义合成方法时numerator和调用使用不使用self记混了,加上self即可
  1. result.numerator=(self.numerator*f.denominator)+(self.denominator*f.numerator);
  2.     result.denominator=self.denominator*f.denominator;
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2