begin expected but end found

Hi I’ve done these lines of code on freepascal:

but when I run it, it said ‘BEGIN’ expected but ‘USES’ found, what should I do to fix it? if i change ‘BEGIN’ on top of ‘USES’ its will be another error

1 Answer 1

The uses clause must appear after the (optional) program statement, but before any other statement. Move the uses clause to the top of the code, immediately after the program statement if indeed you have one.

ЮрОК Пехпатров Мыслитель (5526), закрыт 4 года назад 0
then
Label1.Caption:= ‘Àãîíü!’
else
Label1.Caption:= ‘×åò âñå ïëîõî. ‘;
Log.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
Function PosEx(Const SubStr, S: String; Offset: Cardinal = 1): Integer;
var
res1: Integer;
begin
res1:= pos(‘label4.Caption:=copy(memo1.Text,res1,posex (‘+’,memo1.Text, res1)+1-res1);
end;

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Button1: TButton;
IdHTTP1: TIdHTTP;
Memo1: TMemo;
Button2: TButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;

var
Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);
var
StrPage, ssylka:string;
Log:TstringList;
begin
ssylka:=’http:// play.tegos.ru/login/’;
Log:=TstringList.Create;
Log.Add(‘login=’+Edit1.Text);
Log.Add(‘password=’+Edit2.Text);
Log.Add(‘action=login’);
Log.Add(‘enter=%D0%92%D0%BE%D0%B9%D1%82%D0%B8’);
StrPage:=idhttp1.Post(ssylka,Log);
if pos (‘yourun’, StrPage) <>0
then
Label1.Caption:= ‘Àãîíü!’
else
Label1.Caption:= ‘×åò âñå ïëîõî. ‘;
Log.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
Function PosEx(Const SubStr, S: String; Offset: Cardinal = 1): Integer;
var
res1: Integer;
begin
res1:= pos(‘label4.Caption:=copy(memo1.Text,res1,posex (‘+’,memo1.Text, res1)+1-res1);
end;

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

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.

Оцените статью