2010-10-24 2 views
0

Когда я пытаюсь скомпилировать мой код, где ИНС аннотации, координата координаты 2d и latit поплавковогоНужна помощь обработки сообщения об ошибке: IVALUE требуется в качестве левого операнда назначения

ann.coordinate.latitude = latit; 

я получаю сообщение об ошибке, в котором требуется значение Ivalue как левый операнд присваивания. Что означает эта ошибка и почему она появляется?

ответ

1

Ошибка появляется, потому что вас путают в двух различных применениях точечной нотации. Первый - ann.coordinate, где координата является свойством любого объекта ann. Второй - coordinate.latitude, где координата - это структура, а широта - это поле в структуре. Обычно можно назначить свойство, как в ann.coordinate = aNewCoordinate. И обычно можно назначить поле struct, как в coordinate.latitude = latit. Однако нельзя назначить поле анонимной структуры, возвращенному из свойства getter. Это станет совершенно очевидным, если вы удалите нотацию свойства dot, так как вы остаетесь с [ann coordinate].latitude = latit, что явно неверно. Семантический, вы просите компилятор построить код, который похож на

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

, но это далеко выходит за рамки синтаксиса точки и компилятор отказывается генерировать этот код (и это справедливо).

1

Это означает, что когда вы делаете ann.coordinate.latitude, вы на самом деле пытаетесь присвоить что-то геттеру. широта RETURNS значение, и вы не можете присвоить ему что-то. Вы должны создать новую координату и назначить ее в ann.

Смежные вопросы