Identifier redeclared delphi ошибка

I do not understand why this error occurs…Is this a bug in XE, or is something wrong in the IDE settings?

enter image description here

asked Jun 29, 2012 at 9:07

RBA's user avatar

The System unit is automatically used by all other units in a Delphi program. So you cannot use it again. Simply remove System from your uses clause.

The documentation states:

The System unit and the SysInit unit are used automatically by every application and cannot be listed explicitly in the uses clause.

answered Jun 29, 2012 at 9:09

David Heffernan's user avatar

David HeffernanDavid Heffernan

602k42 gold badges1076 silver badges1491 bronze badges

3

Go Up to Error and Warning Messages (Delphi)

The given identifier has already been declared in this scope — you are trying to reuse its name for something else.

program Tests;
var
  Tests: Integer;
begin
end.

Here the name of the program is the same as that of the variable — we need to change one of them to make the compiler happy.

program Tests;
var
  TestCnt: Integer;
begin
end.

Типов сообщений компилятора — более двухсот. Рассмотрим перечень наиболее встречающихся сообщений класса Error

  • 0. <Что-то1> expected but <Что-то2> found. Обычно это сообщение возникает при синтаксической ошибке.Например,в случае небаланса скобок,компилятор сообщит: ‘)’ expected but ‘;’ found (вместо ожидавшейся скобки найдена запятая).

    Компилятор часто сообщает, что ‘end’ ожидается,например:x:= 5,7; здесь неуместен разделитель-запятая, а сообщается про end. (‘END’ expected but ‘,’ found)

  • 1. <Имя> is not a type identifier. Данное <Имя> не является именем типа.
  • 2. ‘;’ not allowed before ‘Else’. Перед else нельзя ставить точку с запятой
  • 3. Abstract method must be virtual or dynamic. Абстрактный метод должен быть виртуальным или динамическим.
  • 4. Ambiguous overloaded call to <Имя блока>. Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр.
  • 5. Array type required. Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).
  • 6. Assignment to FOR-loop variable <Имя>. Присваивание значения параметру FOR-цикла в теле цикла.

    Например, вследствие описки дважды используется имя i в кратном цикле:

    For i:= 1 to n do For i:= 1 to m do ...
    
  • 7. Break or Continue outside of loop. Break или Continue — не в цикле.
  • 8. Cannot initialize local variables. Локальные переменные запрещено инициализировать (задавать им значения при описании).
  • 9. Cannot assign to/read a read-only/write-only property. Присвоение значения свойству read/only и чтение свойства write/only запрещены.
  • 10. Constant expression expected.В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.
  • 11. Constant expression violates subrange bounds. Выход значения константы из диапазона. Контроль не полон. Например, «сойдет с рук» присваивание x:=3000000000, где х имеет тип integer, но начение х будет искажено.
  • 12. Constant or type identifier expected. Требуется имя типа или тип-диапазон.
  • 13. Could not compile used unit <Имя>. Компиляция присоединенного модуля <Имя> невозможна.
  • 14. Data type too large. Тип определяет структуру размером более 2 Гбайт; это слишком много.
  • 15. Declaration expected but <Что-то> found. Пропущено описание или оператор.
  • 16. Declaration of <Имя> differs from previous declarations… Данный заголовок блока не соответствует упреждающему объявлению блока.
  • 17. Default parameter <Имя> must be by-value or constant. Необязательный параметр (со значением по умолчанию) не должен вызываться по ссылке.
  • 18. Expression expected. В этом месте программы должно стоять выражение.
  • 19. Expression too complicated. Выражение излишне сложно для компиляции.
  • 20. File type not allowed here. В этом месте или в этой роли файловую переменную нельзя использовать. Например, она не может быть формальным параметром-значением.
  • 21. For loop control variable must be simple local variable. Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.
  • 22. For loop control variable must have ordinal type. Параметр цикла должен иметь порядковый тип.Вещественный тип запрещен.
  • 23. Function needs result type. В заголовке функции надо указывать тип ее результата.
  • 24. Identifier expected but <Что-то> found. В этом месте должно стоять имя. Например, пропущено имя функции после Function.
  • 25. Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.
  • 26. Illegal character in input file <знак>. Запретный знак, например «русская» буква, либо вы оставили скобку }, убрав открывающую скобку {.
  • 27. Illegal type in Read/Readln (Write/Writeln) statement. Элемент запрещенного типа в списке ввода/вывода.
  • 28. Incompatible types <указание типов>. Несоответствие типов по присваиванию или типов операндов одной операции. Сообщение выдается и при неверном использовании структур. Например, z — запись, ошибочно записано присваивание z:= 0 (работать надо с полями записи).
  • 29. Invalid function result type. Недопустимый тип результата функции.
  • 30. Label already defined: <Метка>. <Метка> уже помечает другой оператор.
  • 31. Left side cannot be assigned to. He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе.
  • 32. Line too long. В строке программного текста больше 255 знаков.
  • 33. Low bound exceeds high bound. Нижняя граница превышает верхнюю.
  • 34. Missing operator or semicolon.Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ‘;’ маркер ошибки стоит на очередном предложении (объявлении или операторе).
  • 35. Missing parameter type. He указан тип формального параметра-значения или параметра процедурного типа.
  • 36. Not enough actual parameters. He хватает фактических параметров.
  • 37. Need to specify at least one dimension … Нужно задавать в операторе SetLength хотя бы один размер динамического массива.
  • 38. Number of elements differs from declaration. Число элементов в структурной константе не соответствует ее описанию.
  • 39. Operator not applicable to this operand type. Операция не применима к операндам данного типа. Например: ‘А’ or ‘В’; ‘Text1’* ‘Text2’.
  • 40. Order of fields in record constant differs from declaration. Порядок полей в записи-константе не соответствует описанию записи.
  • 41. Ordinal type required. Требуется порядковый тип (например, в индексе).
  • 42. Out of memory. Компилятору не хватает памяти.
  • 43. Statement expected but <Что-то> found. В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание (<Что-то>). Ошибочная форма обращения к процедуре Procedure <Имя> или к функции Function <Имя> также вызывает сообщение.
  • 44. Sets may have at most 256 elements. Множество (тип Set) не может содержать более 256 элементов.
  • 45. Slice standard function only allowed as open array argument. Функцию Slice можно использовать лишь как фактический параметр
  • 46. Statement not allowed in interface part. Предложения в секции интерфейса программного модуля недопустимы.
  • 47. Syntax error in real number. Синтаксическая ошибка в записи числа вещственного типа.
  • 48. There is no overload version of <Имя> that can be called with these arguments.Не предусмотрен перегружаемый блок <Имя>, который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х – выражение вещественного типа.
  • 49. Too many actual parameters. Фактических параметров больше, чем формальных.
  • 50. Type actual and formal var parameters must be identical. Тип фактического параметра должен быть идентичен типу формального параметра-переменной.
  • 51. Type of expression must be <Тип>. Выражение должно быть указанного типа. Например,после While и Until должно стоять логическое выражение.
  • 52. Undeclared identifier: <Имя>.Не описано <Имя>. Проверьте есть ли описание в нужном месте,нет ли описок в имени. Если указано имя компонента формы, проверьте,поместили ли компонент на данную форму.
  • 53. Unexpected end of file in comment started on line <N>. Неожиданный конец файла при незавершенном комментарии, начало комментария — в строке N.
  • 54. Unit name mismatch: <Имя>. Имя модуля ошибочно.
  • 55. Unsatisfied forward or external declaration <Имя>. Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание).
  • 56. Unterminate string. He закрыта апострофом строка-константа типа string.

Рассмотрим также некоторые сообщения классов warning и hint.

  • Return value of function <Имя> might be undefined. В теле функции нет присваивания ее результата.
  • Variable <Имя> might not have been initialized. Указывает имя переменой, которой не задали значения.
  • For-Loop variable <Имя> may be undefined after loop. Попытка использования значения параметра For-цикла после завершения этого цикла.
  • Text after final ‘END.’ ignored by compiler. Текст, идущий за конечной строкой модуля, игнорируется компилятором.
  • Variable <Имя> is declared but never used in <Имя блока>. Обращает внимание на переменную <Имя>, описанную,но не нашедшую применения.
  • Value assigned to <Имя> never used. Хотя бы одно значение переменной <Имя> никак не использовано.

Несколько рекомендаций

Сосредотачивайтесь на первом сообщении компилятора. Исправление хотя бы одной ошибки и повторная компиляция может значительно уменьшить число сообщений об ошибках,поэтому не упорствуйте, стремясь понять сразу причину каждого сообщения.

Не удаляйте прежний вариант кода,пока не убедитесь,что ошибка устранена. Лучше на время закомментировать код,заключив его в скобки: { код }

Компилятор не анализирует, как будет выполняться программа, поэтому выход значения индекса из диапазона выявляет только если индекс задан константным выражением. Деление на ноль вообще пропускается, кроме оператора div, в случае если делитель — константное выражение.

 
seledka
 
(2003-03-13 13:51)
[0]

Простите за возможное дилетантство, уважаемые Мастера!

У меня Delphi 4 и Win2000

Создал форму с одной кнопкой, которая должна создать файл на диске и закрывать его (как в примере):



...

uses

Windows, Messages, System, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

...

procedure TForm1.Button1Click(Sender: TObject);

begin

AsignFile(filesign,"c:\serega\file000.txt");

Rewrite(filesign);

CloseFile(filesign);

end;

Компилю, а мне говорят:

Identifier redeclared: «System»

Undeclared Identifier: «AsignFile» соответственно

Подскажите кто-нибудь, пожалуйста, как и что делать.

Огромное спасибо заранее.

ЗЫ: Ну очень хочется создать файл.


 
Anatoly Podgoretsky
 
(2003-03-13 13:55)
[1]

Windows, Messages,
System, SysUtils, …


 
Palladin
 
(2003-03-13 13:56)
[2]

во первых AsignFile пишется AssignFile

во вторых данная ошибка изза повторного (чувствую что в Inpmlementation) подключения System


 
Palladin
 
(2003-03-13 13:59)
[3]


 
Игорь Шевченко
 
(2003-03-13 14:00)
[4]

А system вообще не надо объявлять :-)


 
icWasya
 
(2003-03-13 14:28)
[5]

Модуль System всегда неявно подключается к проекту и поэтому его ненужно указывать в секции USES


 
Anatoly Podgoretsky
 
(2003-03-13 14:29)
[6]

Не не дано, а нельзя


 
Palladin
 
(2003-03-13 14:41)
[7]

Млин… точно нельзя… что то не замечал раньше эту фичу…


 
seledka
 
(2003-03-13 14:52)
[8]

Да, точно, второй раз поключ. System. Удалил. Компилируется.

Всё здорово!

Спасибо большое!


Member Avatar for Morten Brendefu


Dear enlightened ones.
First of all. I am using Delphi 9.
My code compiles and run with no error at all, still I am confused about the structure window in the Delphi window.
It tells me that I have redeclared some identifiers.
The thing is that I have a few overloaded procedures of which uses different parameters only. The code in each procedure is however very similar, hence I use same local variables.

I think the structure window is wrong in its assumption, but I am not 100% certain.
All of these procedures are marked with overload-directive in unit declaration.

My logic say that maybe it is enough to declare the local variables in first procedure since they are Overloaded.
I tried commenting out the local var and variable where the Structure window tell me they are redeclared, and it seem to work alright.
what I don’t seem to grasp is that I do not get the redeclared error in all the overloaded procedures only a few of them.

I would really appreciate some thoughts on this issue.
I think that even though the procedures are Overloaded, the correct approach is to have the declaration of local variables in place in every one of them.
Compiling does not cause problems and unit works flawlessly.
:-/ Is this a known issue with the Structure window?

PROCEDURE DynamicCreateIndex(VAR ArrParam:DynamicLongIntArray; VAR ArrParamIndex: DynamicIntegerArray);
  VAR
    x : INTEGER;
  BEGIN
    FOR x:=0 TO HIGH(ArrParamIndex) DO BinarySortIndex(ArrParam,ArrParamIndex,x);
  END;
PROCEDURE DynamicCreateIndex(VAR ArrParam,ArrParamIndex: DynamicIntegerArray);
  VAR
    x : INTEGER; // Error in Structure Inspector. Tells me the identifier is redeclared.
  BEGIN
    FOR x:=0 TO HIGH(ArrParamIndex) DO BinarySortIndex(ArrParam,ArrParamIndex,x);
  END;
PROCEDURE DynamicCreateIndex(VAR ArrParam:DynamicStringArray;  VAR ArrParamIndex: DynamicIntegerArray);
  VAR
    x : INTEGER;
  BEGIN
    FOR x:=0 TO HIGH(ArrParamIndex) DO BinarySortIndex(ArrParam,ArrParamIndex,x);
  END;
PROCEDURE DynamicCreateIndex(VAR ArrParam:DynamicLongIntArray; VAR ArrParamIndex: DynamicIntegerArray; CONST HighBound:INTEGER);
  VAR
    x : INTEGER;
  BEGIN
    FOR x:=0 TO HighBound DO BinarySortIndex(ArrParam,ArrParamIndex,x);
  END;
PROCEDURE DynamicCreateIndex(VAR ArrParam,ArrParamIndex: DynamicIntegerArray; CONST HighBound:INTEGER);
  VAR
    x : INTEGER; // Error in Structure Inspector. Tells me the identifier is redeclared.
  BEGIN
    FOR x:=0 TO HighBound DO BinarySortIndex(ArrParam,ArrParamIndex,x);
  END;
PROCEDURE DynamicCreateIndex(VAR ArrParam:DynamicStringArray; VAR ArrParamIndex: DynamicIntegerArray; CONST HighBound:INTEGER);
  VAR
    x : INTEGER;
  BEGIN
    FOR x:=0 TO HighBound DO BinarySortIndex(ArrParam,ArrParamIndex,x);
  END;

Понравилась статья? Поделить с друзьями:
  • Identifier expected java ошибка
  • Identified by mysql ошибка
  • Id ошибок amxx
  • Id961 eliwell ошибка e1
  • Id ошибок pawn