Delphi: сообщения компилятора. Часть 2 (differs, default, parameter, declarations) |
Автор megabax | ||||||||||||||
10.01.2011 г. | ||||||||||||||
Delphi: сообщения компилятора. Часть 2 (differs, default, parameter, declarations)Продолжу публикацию о сообщениях компилятора. Declaration of <Имя> differs from previous declarations... Данный заголовок блока не соответствует упреждающему объявлению блока. Такая ошибка может возникнуть например в том случае, если вы создали класс, объявили у него виртуальный метод, а в следующем классе переопределяете этот метод но с другим набором параметров: Выйдет такая ошибка так же в том случае, если вы метод объявили с одним набором параметров, а реализуете его с другим набором: Default
parameter <Имя> must be by-value or constant.
Необязательный параметр (со значением по
умолчанию) не должен вызываться по ссылке.
то потом вы можете написать вот так:
Но если вы попробуете написать что то вроде:
то у вас будет выдано вышеназванное сообщение об ошибке. Почему так? Дело в том, что когда вы пишите что то вроде того:
то вы потом можете написать вот так:
Таким образом, процедура у вас изменит содержимое переменной. Естественно, в этом случае вызов процедуры без параметров просто не имеет смысла, поэтому параметр с директивой default не может быть объявлен как var. File type not allowed here. В этом месте или в этой роли файловую переменную нельзя использовать. Например, она не может быть формальным параметром-значением. В частности, вот такой код скомпилирован не будет:
Правильно вот так:
For loop control variable must have ordinal type. Параметр цикла должен иметь порядковый тип. Вещественный тип запрещен. Вот пример кода, содержащего такую ошибку:
Function needs result type. В заголовке функции надо указывать тип ее результата. Если встречается такая ошибка, значит, вы не указали тип возвращенного функцией значения. вот так неправильно:
А вот так правильно:
Identifier expected but <Что-то> found. В этом месте должно стоять имя. Например, пропущено имя функции после Function. Вот пример кода с такой ошибкой6
Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.
Illegal character in input file <знак>. Запретный знак, например "русская" буква, либо вы оставили скобку }, убрав открывающую скобку {.
Incompatible
types <указание типов>. Несоответствие
типов по присваиванию или типов операндов
одной операции. Сообщение выдается и при
неверном использовании структур. Например,
z - запись, ошибочно записано присваивание z:=
0 (работать надо с полями записи). Label already defined: <Метка>. <Метка> уже помечает другой оператор. Left side cannot be assigned to. He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе. Line too long. В строке программного текста больше 255 знаков. Например, такая ошибка возникает при "кривом" объявлении массива, например, вот так:
Missing operator or semicolon. Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ';' маркер ошибки стоит на очередном предложении (объявлении или операторе). Вот пример кода с данной ошибкой: Not
enough actual parameters. He
хватает
фактических
параметров.
Такое сообщение "выскочит" если вы
объявили процедуру или функцию с
параметрами (обязательными), а когда
используете ее, то параметры указать забыли.
Продолжение следует. Скриншоты, приведенные в данной статье , являются цитатами и иллюстрациями программного продукта "Turbo Delphi", авторское право на который принадлежит "Borland Software Corporation.
|
||||||||||||||
Последнее обновление ( 06.02.2013 г. ) |