关于Objective-C 错误代码 Expression is not assignable 引发的问题
2015-12-21 19:31
651 查看
今天在一个OC代码练习中我遇到了 Expression is not assignable 这个问题,起因是这样的
我先是创建了一个Person 类,然后在类中定义了一个Studen 结构体,然后利用这个结构体定义一个 Bob 变量,.h文件的内容如下
然后我在main 函数里面创建了一个Person 的对象p1 ,我想利用p1 对其内置的Bob.age 属性赋值,很自然的我想到了这种方法
p1.Bob.age = 14;
结果刚写完就出现了这个
看来这样是行不通的了,于是百度错误关键字 Expression is not assignable
貌似找到了原因
p1.Bob 与Bob.age 中的两个点的含义是不同的,第一个点是OC中的点语法,第二个点是C语言中的语法,
而且由于OC只是C语言的一个扩展,所以上面的错误代码会被转成C语言的函数调用形式,类似于这样
然后我引用我看到的文章的原话
而在C语言里,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。
看来原因就是出现在这里了,接下来就是解决办法了
我总结了有几个解决办法
1.在main 函数里面新建一个结构体变量然后对p1.Bob 进行等价赋值,具体代码如下
这样对subBob 的age 赋值其实就是对p1.Bob的age 赋值了
2.将前面的点换成 ->
直接将前面的点换掉肯定是不行的,要在.h 文件里面先声明成员变量,而且因为涉及到作用域的问题,要把成员变量的作用域设置为@public
之后在main 函数里面就可以这样用了
我先是创建了一个Person 类,然后在类中定义了一个Studen 结构体,然后利用这个结构体定义一个 Bob 变量,.h文件的内容如下
#import <Foundation/Foundation.h> typedef struct { int age; int number; }Student; @interface Person : NSObject { @public Student Bob; } @property (nonatomic, assign) Student Bob; @end
然后我在main 函数里面创建了一个Person 的对象p1 ,我想利用p1 对其内置的Bob.age 属性赋值,很自然的我想到了这种方法
p1.Bob.age = 14;
结果刚写完就出现了这个
看来这样是行不通的了,于是百度错误关键字 Expression is not assignable
貌似找到了原因
p1.Bob 与Bob.age 中的两个点的含义是不同的,第一个点是OC中的点语法,第二个点是C语言中的语法,
而且由于OC只是C语言的一个扩展,所以上面的错误代码会被转成C语言的函数调用形式,类似于这样
getBob().age = 14;
然后我引用我看到的文章的原话
而在C语言里,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。
看来原因就是出现在这里了,接下来就是解决办法了
我总结了有几个解决办法
1.在main 函数里面新建一个结构体变量然后对p1.Bob 进行等价赋值,具体代码如下
Person *p1 = [[Person alloc] init]; Student subBob; p1.Bob = subBob; subBob.age = 14;
这样对subBob 的age 赋值其实就是对p1.Bob的age 赋值了
2.将前面的点换成 ->
直接将前面的点换掉肯定是不行的,要在.h 文件里面先声明成员变量,而且因为涉及到作用域的问题,要把成员变量的作用域设置为@public
@interface Person : NSObject { @public Student Bob; }
之后在main 函数里面就可以这样用了
p1->Bob.age = 14;
相关文章推荐
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- Objective-c语言_协议
- Objective-c语言_延展
- Objective-c语言_类目
- dYSM分析崩溃日志
- #Objective - C - Fifth-Day 三大容器(数组、字典、集合)常用语法归纳总结
- JAVA 1.6源码解析-Object类
- The constness of a method should makes sense from outside the object
- Informatica Connection Objects
- Objective-c语言_文件基本操作
- Java基础系列六、IDE+Object+String
- 使用 SWFObject.js 插入Flash
- objective-c语言_data的转换
- swfobject简单封装
- 【深入学习iOS开发(一)】Objective-C Reflection(Objective-C 反射机制)
- Objective-C汇总
- a different object with the same identifier value was already associated with the session
- 将Map<String, List<Map<String,Object>>>进行排序
- 关于ObjectARX2016 64位开发环境的搭建
- iOS开发系列—Objective-C之Foundation框架