A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 执着的土豆 中级黑马   /  2014-4-27 14:41  /  1590 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 执着的土豆 于 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.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
gaoxinglei123 来自手机 中级黑马 2014-4-27 15:04:41
沙发
成员变量是对象的变量。当你用类实例化一个对象时这个对象所拥有的变量。类似于对象方法。只能在对象方法中访问。不能用类方法访问
回复 使用道具 举报
本帖最后由 yaozeyang_2014 于 2014-4-27 15:08 编辑

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

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

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

恩恩,谢谢!   我中间加空格了,可能在这上面显示得不太明显,有一个方法前面没有加空格,其他都加了,急于解决问题,没注意。  谢谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马