Declaration expected but identifier found

type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Label3: TLabel; Label4: TLabel; Edit2: TEdit;

ну дай файл-то посмотреть! не копируй текст сюда, прицепи файлы pas и fmx как вложения к вопросу.

type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Label3: TLabel; Label4: TLabel; Edit2: TEdit;

[Error] Unit1.pas(327): Declaration expected but identifier ‘RegisterClass’ found

хотя модуль Classes подключен.

1 ответ 1

В uses Windows подключен или SysUtils , точно не знаю, в каком из них этот метод. Так что проверь оба.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками delphi delphi-7 синтаксис сериализация или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.10.35756

Типов сообщения компилятора очень много, более двух сотен. В данной статье я расскажу о наиболее часто встречающихся. И так, начнем:

expected but found. Обычно это синтаксическая ошибка. Например, пропущена скоба: отрытых скобок больше, чем закрытых. В этом случае при компиляции программы компьютер сообщит: " ‘)’ expected but ‘;’ found ":

Другой часто встречающийся случай "’END’ expected but ‘,’ found". Это сообщение может быть выдано в случае, если в качестве разделителя целой и дробной части вместо точки указали запятую:

is not a type identifier. Данное не является именем типа. Такая ошибка выходит в случае, если вы пытаетесь объявить тип переменной, а в качестве имени типа используете имя, которое уже было использовано для чего то другого. Например, таким именем уже объявлена переменная:

Читайте также:  Программы для редактирования звуковых файлов

‘;’ not allowed before ‘Else’. Перед командой else нельзя ставить точку с запятой. Тут комментарии излишни.

Abstract method must be virtual or dynamic . Абстрактный метод должен быть виртуальный или динамический. Давайте разберемся, почему он не может быть обычным. Предположим, мы пишем компьютерную игру. У нас есть некий класс TUnit, который предназначен для отрисовки "человечка". У него есть методы draw и undraw, которые соответственно рисуют и убирают с экрана игровой объект. Допустим, у нас есть метод Go, который сначала вызывает метод Undraw, изменяет его координаты и запускает метод draw. Мы решили создать другой класс, например, TAdvancedUnut, который будет выглядеть немножко по другому, и нам потребуется переписать у него метод draw. Метод Go при этом не меняется. Угадайте, с трех раз, как будет работать метод go, если мы его оставим как есть?

Правильно, если мы объявим метод draw виртуальным, то метод go вызовет правильный метод draw, а если нет, то старый, тот, что реализован у TUnit. Теперь перейдем к абстрактным методам. Представьте себе, что TUnit — это не полноценный класс, а только заготовка. Мы знаем, что у всех его предков (или почти у всех), метод go будет одинаковым, а draw — разным. В этом случае мы можем у tUnit объявить абстрактный метод draw. Понятно, что если мы не объявим его виртуальным или динамическим, то у всех потомков данного класса будет вызывается несуществующий код метода draw.

Ambiguous overloaded call to . Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр. Такое сообщение об ошибках возникает, когда вы пытаетесь перезагрузить процедуру или функцию с таким набором параметров, когда невозможно сделать однозначный выбор. Например, вот так:

Читайте также:  После обновления драйвера видеокарты синий экран
procedure proba(a:integer; b:integer=0); overload;
procedure proba(a:integer; b:boolean=false); overload;

Если вы попытаетесь использовать в дальнейшем процедуру proba с одним параметром, то будет выдано это сообщение:

Действительно, откуда компьютер знает, что пользователь имел в виду, когда в конструкции

proba(1)

опустил параметр по умлчанию6 то ли это b:integer=0, то ли b:boolean=false.

Array type required. Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).

Assignment to FOR-loop variable . Присваивание значения параметру FOR-цикла в теле цикла. Например, вследствие описки дважды используется имя i в кратном цикле:

For i:= 1 to n do For i:= 1 to m do .

Break or Continue outside of loop. Break или Continue — не в цикле. Тут тоже комментарии излишни — эти операторы не имеют смысла вне цикла.

Cannot initialize local variables. Локальные переменные запрещено инициализировать (задавать им значения при описании).

Вот так не правильно:

Надо сделать вот так:

Cannot assign to/read a read-only/write-only property. Присвоение значения свойству read/only и чтение свойства write/only запрещены. Вот пример конструкции с такой ошибкой:

Constant expression expected. В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.

Вот пример данной ошибки:

А вот так правильно:

Constant expression violates subrange bounds. Выход значения константы из диапазона. Контроль не полон. Например, компилятор проупстит присваивание x:= 4 000000000, где х имеет тип integer, но з начение х будет искажено.

Constant or type identifier expected. Требуется имя типа или тип-диапазон.

Читайте также:  Высота телевизора от пола в спальне

Вот пример такой ошибки:

В Delphi тип text не применяется, правильно сделать так:

procedure TForm1.FormCreate(Sender: TObject);
var MyVar:TextFile;
begin

Could not compile used unit . Компиляция присоединенного модуля невозможна. В секции uses вы указали файл, который система не может скомпилировать. Причины могу быть самые разные, например, в этом модуле имеются какие либо другие ошибки :

Data type too large. Тип определяет структуру размером более 2 Гбайт; это слишком много. Такой большой файл может даже в память ОЗУ не поместиться, елси ее менее 2 Гб, что еще пока бывает. Тут, думаю, комментарии излишний.

Declaration expected but found. Пропущено описание или оператор. Вот пример данной ошибки (ее причина лишнее слово "end" в конструкции "case"):

Скриншоты, приведенные в данной статье , являются цитатами и иллюстрациями программного продукта "Turbo Delphi", авторское право на который принадлежит "Borland Software Corporation.