//新手,刚学Objective-c
/*
用的Objective-c程序设计第四版
在第225页下面是接口部分
#import <Foundation/Foundation.h>//Fraction类@interface Fraction : NSObject@property int numerator,denominator;//就是这两个变量-(void) print;
-(void) setTo: (int) n over: (int) d;
-(double) convertToNum;-(void) reduce;@end我把分类的接口和实现都放在main.m里(书上是这么做的,而且后来我改成放在新建的文件里还是没用)然后是分类的接口
#import "Fraction.h"@interface Fraction (MathOps)
-(Fraction *) add: (Fraction *) f;
-(Fraction *) sub: (Fraction *) f;
-(Fraction *) mul: (Fraction *) f;
-(Fraction *) div: (Fraction *) f;
@end
下面是实现~~(一部分,其它的问题是一样的)
@implementation Fraction (MathOps)
-(Fraction *) add: (Fraction *) f
{
    //添加两个分数
    // a/b + c/d = ((a*d) + (b*c)) / (b*d)
    
    //储存相加后的结果
    Fraction *result = [[Fraction alloc] init];
    
    
    result.numerator = numerator * f.denominator + denominator * f.numerator;//就在这里,问题出现了,Xcode提示numerator是未声明的变量还有denominator。
    result.denominator = denominator * f.denominator;
    
    我不是在Fraction接口里声明了numerator和denominator么?
    难道分类不能使用Fraction的变量?
    更怪异的是一旦把import“Fraction.h”改成import"Fraction.m"Xcode就提示错误不存在了,可运行时又会出现一个
ld: 4 duplicate symbols for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    
    求大神解释~~~~~100分奉上~~~
 */

解决方案 »

  1.   

    我不太懂Objective-C,不过根据我.Net的经验,对于一个对象的property来说,内部访问的话,应该是用private的私有变量来吧
    private int _denominator 
    public int denominator 
    {
    get{return _denominator ;}
    set{_denominator =value;}
    }
    对象内部使用的话,推荐是用_denominator 当然也可以this.denominator @property int numerator,denominator;
    这两个property 对象应该有对应的私有变量,用那个试试,或者result .denominator 
    好吧,其实我闲的蛋疼
      

  2.   

    接口里@property int numerator,denominator;默认是@protected变量就是能被子类使用的变量,可是我在分类里用不了
      

  3.   

    特地去搜了一下@property 对应的应该有个这个
    @synthesize denominator = _denominator;
    谁告诉你result.denominator = denominator * f.denominator;取当前对象属性denominator可以直接这样取的?
    要么是self.denominator   要么_denominator   我看UiViewController里面每个property  他都写了一个_property 的变量的我看我可以转行做IOS开发了
      

  4.   

    是可以取的~~~我清楚了,是书上少写了~~~~oc里不用self.属性~~
      

  5.   

    访问成员要加下_的 而且self.也是正确地哦
      

  6.   

    访问成员是_,self.其实是调用的get方法
      

  7.   

    @synthesize