需要帮助处理错误消息:Lvalue需要作为赋值的左操作数

时间:2010-10-24 08:45:35

标签: objective-c cocoa-touch

当我尝试编译我的代码时,ann是一个注释,坐标是一个二维坐标,而latit是一个浮点数

ann.coordinate.latitude = latit;

我收到一条错误消息,称Ivalue需要作为分配的左操作数。这个错误意味着什么,为什么会出现?

2 个答案:

答案 0 :(得分:1)

错误正在显现,因为您对点符号的两种不同用法感到困惑。第一个是ann.coordinate,其中坐标是ann的任何对象的属性。第二个是coordinate.latitude,其中坐标是结构,纬度是结构中的字段。通常可以分配给属性,如ann.coordinate = aNewCoordinate中所示。通常可以分配给结构字段,如coordinate.latitude = latit中所示。但是,无法分配从属性getter返回的匿名结构的字段。如果你删除属性点表示法,这将变得非常明显,因为你留下了[ann coordinate].latitude = latit,这显然是错误的。从语义上讲,您要求编译器构造类似于

的代码
__typeof__(ann.coordinate) __tempCoordinate = ann.coordinate;
__tempCoordinate.latitude = latit;
ann.coordinate = __tempCoordinate;

但这远远超出了点语法的范围,并且编译器拒绝生成此代码(并且正确地如此)。

答案 1 :(得分:1)

这意味着当你做ann.coordinate.latitude时,你实际上是在尝试为吸气剂分配东西。 latitude返回一个值,您无法为其指定内容。您必须创建一个新坐标并将其分配给ann。