.
Delphi: сообщения компилятора. Часть 3 (declaration, type, memory)
Автор megabax   
01.05.2011 г.
Массив

 Delphi: сообщения компилятора. Часть 3 (declaration, type, memory)

 Need to specify at least one dimension ... Нужно задавать в операторе SetLength хотя бы один размер динамического массива. Вот пример кода с данной ошибкой:

procedure TfrmErrorTest.btnStartClick(Sender: TObject);

var s:string; aa:array of integer;

begin

   setLength(aa);

   Proba1(s);

   messageDlg(s,mtInformation,[mbOk],0);

end;

Правильно будет 

setLength(aa,10);

или, например:

setLength(aa,10,15);

Подробнее о динамических массивах см. тут. 

Number of elements differs from declaration. Число элементов в структурной константе не соответствует ее описанию. вот пример кода с такой ошибкой:

const ar:array[1..2] of integer=(1,2,3);

Operator not applicable to this operand type. Операция не применима к операндам данного типа. Например: 'А' or 'В'; 'Text1'* 'Text2'.

Order of fields in record constant differs from declaration. Порядок полей в записи-константе не соответствует описанию записи. Вот пример кода, который содержит данную ошибку:

type TRec=record

       a:integer; b:string;

end;

 

const a:TRec=(b:'d';a:2);

Правильно будет вот так:

type TRec=record

       a:integer; b:string;

end;

 

const a:TRec=(a:2;b:'d');

Out of memory. Компилятору не хватает памяти. 

Statement expected but <Что-то> found. В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание (<Что-то>). Ошибочная форма обращения к процедуре Procedure <Имя> или к функции Function <Имя> также вызывает сообщение. 

 Sets may have at most 256 elements. Множество (тип Set) не может содержать более 256 элементов. 

There is no overload version of <Имя> that can be called with these arguments.Не предусмотрен перегружаемый блок <Имя>, который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х - выражение вещественного типа.

Too many actual parameters. Фактических параметров больше, чем формальных. Такая ошибка возникает если для процедуры или функции предусмотерно меньше параметров, чем вы реально передаете. вот пример кода с такой ошибкой:

procedure Proba1(a:integer);

begin

  //some operators

end;

 

 

procedure TfrmErrorTest.btnStartClick(Sender: TObject);

begin

  Proba1(1,2);

end;

 Type actual and formal var parameters must be identical. Тип фактического параметра должен быть идентичен типу формального параметра-переменной. вот пример кода с данной ошибкой:

procedure Proba1(var a:integer);

begin

  //some operators

end;

 

 

procedure TfrmErrorTest.btnStartClick(Sender: TObject);

var a:string;

begin

  Proba1(a);

end;

Type of expression must be <Тип>. Выражение должно быть указанного типа. Например, после While и Until должно стоять логическое выражение. Вот пример кода с данной ошибкой:

procedure TfrmErrorTest.btnStartClick(Sender: TObject);

begin

  while 1 do //some operators

end;

правильно будет так:

procedure TfrmErrorTest.btnStartClick(Sender: TObject);

begin

  while SomeVariable=1 do //some operators

end

 

Undeclared identifier: <Имя>.Не описано <Имя>. Проверьте есть ли описание в нужном месте, нет ли описок в имени. Если указано имя компонента формы, проверьте, поместили ли компонент на данную форму. 

Unexpected end of file in comment started on line <N>. Неожиданный конец файла при незавершенном комментарии, начало комментария - в строке 

 

Unsatisfied forward or external declaration <Имя>. Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание). 

Unterminate string. He закрыта апострофом строка-константа типа string.

Продолжение следует.

 

Последнее обновление ( 06.02.2013 г. )