2010-10-24 37 views
0

当我尝试编译我的代码,其中安是一个注释的左操作数,坐标是二维的坐标,并latit是浮动需要帮助处理错误消息:需要Ivalue作为分配

ann.coordinate.latitude = latit; 

我得到一个错误消息说作为赋值的左操作数需要Ivalue。这个错误是什么意思,它为什么显示出来?

回答

1

错误显示出来,因为您被点符号的两种不同用法所困惑。第一个是ann.coordinate,其中坐标是任何对象的属性。第二个是coordinate.latitude,其中坐标是结构,纬度是结构中的字段。通常可以分配给一个属性,如ann.coordinate = aNewCoordinate。通常可以将其分配给结构字段,如coordinate.latitude = latit。但是,不能分配给从属性获取器返回的匿名结构的字段。如果您删除属性点符号,这将变得非常明显,因为您随后留下了[ann coordinate].latitude = latit,这显然是错误的。语义,你问的编译器来构建代码,类似于

__typeof__(ann.coordinate) __tempCoordinate = ann.coordinate; 
__tempCoordinate.latitude = latit; 
ann.coordinate = __tempCoordinate; 

但这远点语法的范围和编译器拒绝生成该代码(这是理所当然的)。

1

这意味着,当你做ann.coordinate.latitude时,你实际上是在尝试给getter分配一些东西。纬度返回一个值,你不能分配一些东西给它。您必须创建一个新的坐标并将其分配给ann。