28.11.2001, 17:47 | #1 |
Administrator
|
Ошибка компилятора (синтаксического анализатора)
Иногда компилятор ругается без причины, например: X++: void new (Object _object) { object = _object; } X++: void new (Object _object) { ; object = _object; } |
|
01.04.2007, 15:08 | #2 |
Участник
|
Дело в том, что компилятор допускает одинаковые имена для типов и переменных.
Если переменная имеет точно такое же название, что и тип, то компилятор: 1. думает, что продолжается блок определения переменных, 2. встречает после имени типа недопустимую конструкцию 3. ругается. Так, в приведенном выше примере, переменная называется object. Но в системе есть тип object. Поэтому компилятор "думает", что в первой строке идет определение переменной типа Object, встречает знак = вместо названия переменной и застывает в ступоре. Точка с запятой дает понять компилятору, что блок определения переменных кончился. После точки с запятой компилятор ожидает lvalue и правильно разбирается с одинаковыми именами переменных и типов. |
|