2010-10-24 38 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。