黑马程序员技术交流社区

标题: OC中,对象方法和类方法练习报错 [打印本页]

作者: 执着的土豆    时间: 2014-4-27 14:41
标题: OC中,对象方法和类方法练习报错
本帖最后由 执着的土豆 于 2014-4-27 15:43 编辑

大家帮忙看看,为什么这样调用会报错呢?直接上代码和运行结果吧。
  1. #import <Foundation/Foundation.h>
  2. @interface Penson :NSObject
  3. {
  4.      int _age;
  5. }
  6. - (void)setAge:(int)age;
  7. - (int)age;
  8. + (void)setAge:(int)age;
  9. + (int)age;
  10. @end

  11. @implementation Penson
  12. - (void)setAge:(int)age
  13. {
  14.      _age=age;
  15. }
  16. -(int)age
  17. {
  18.     return _age;
  19. }
  20. + (void)setAge:(int)age
  21. {
  22.    _age=age;
  23.     NSLog(@"%d",_age);
  24. }
  25. + (int)age
  26. {
  27.     [self setAge:20];
  28.     return _age;
  29. }
  30. @end

  31. int main()
  32. {
  33.     Penson *p= [Penson new];
  34.     [p setAge:10 ];
  35.     NSLog(@"%d",[p age]);
  36.     NSLog(@"%d",[Penson age] );
  37.     return 0;
  38.    
  39. }
复制代码

运行结果:
3三大特性的练习.m:23:4: error: instance variable '_age' accessed in class
      method
   _age=age;
   ^
3三大特性的练习.m:24:17: error: instance variable '_age' accessed in
      class method
    NSLog(@"%d",_age);
                ^
3三大特性的练习.m:30:12: error: instance variable '_age' accessed in
      class method
    return _age;
           ^
3 errors generated.


作者: gaoxinglei123    时间: 2014-4-27 15:04
成员变量是对象的变量。当你用类实例化一个对象时这个对象所拥有的变量。类似于对象方法。只能在对象方法中访问。不能用类方法访问
作者: yaozeyang_2014    时间: 2014-4-27 15:07
本帖最后由 yaozeyang_2014 于 2014-4-27 15:08 编辑

类方法是不能访问成员变量的,用实例方法吧,把+号变-号就可以,setter和getter都用-,然后你需要注意一下习惯,-后面最好敲一个空格
作者: 执着的土豆    时间: 2014-4-27 15:39
gaoxinglei123 发表于 2014-4-27 15:04
成员变量是对象的变量。当你用类实例化一个对象时这个对象所拥有的变量。类似于对象方法。只能在对象方法中 ...

哦。   明白了。   我得代码里,好像时直接给类得定义里面赋值了,没有具体到哪个对象。  晕,昨天还给别人回答类似得问题,今天自己绕晕了。  谢谢了!
作者: 执着的土豆    时间: 2014-4-27 15:41
马凯文 发表于 2014-4-27 15:05
三个错误是同一类错误 instance variable '_age' accessed in class method实例变量“_age”不能在类方法中 ...

恩恩,明白了,上次你就给我解了个难题,讲得很透彻,非常感谢。  我加把劲,有机会得话咱们班里见!:)
作者: 执着的土豆    时间: 2014-4-27 15:42
yaozeyang_2014 发表于 2014-4-27 15:07
类方法是不能访问成员变量的,用实例方法吧,把+号变-号就可以,setter和getter都用-,然后你需要注意一 ...

恩恩,谢谢!   我中间加空格了,可能在这上面显示得不太明显,有一个方法前面没有加空格,其他都加了,急于解决问题,没注意。  谢谢。




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