Wątek przeniesiony 2015-04-12 20:40 z Delphi i Pascal przez olesio.

Błąd: Missing operator or semicolon.

0

Serwus,
Mam mały błąd w kodzie i nie mam pojęcia na czym on polega :d. Tak, jestem noga z delphi.

screen z błędem:

errors.jpeg

unit abc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Plik1: TMenuItem;
    Otwrzbaze1: TMenuItem;
    Zapiszbaze1: TMenuItem;
    Zamknij1: TMenuItem;
    Wyj1: TMenuItem;
    Pomoc1: TMenuItem;
    O1: TMenuItem;
    OpenDialog1: TOpenDialog;
    Nowabaza1: TMenuItem;
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    SaveDialog1: TSaveDialog;
    Button4: TButton;
    Memo3: TMemo;
    ListBox1: TListBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure O1Click(Sender: TObject);
    procedure Otwrzbaze1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Nowabaza1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Zapiszbaze1Click(Sender: TObject);
    //procedure FormCreate(Sender: TObject);
    //procedure ListBox1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
  wskaznik = ^element;
       element = record
                   gry : string;
                   magazyn : string;
                   premiera : integer;
                   nast : wskaznik;
                   poprz : wskaznik;
                 end;

var
  Form1: TForm1;
  poczatek : wskaznik;
  fil : wskaznik;
  prev : wskaznik;
  next : wskaznik;
  pp : string;
  ruch : wskaznik;
  koniec : wskaznik;
  TF : TextFile;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.O1Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;

procedure TForm1.Otwrzbaze1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;

procedure TForm1.Button1Click(Sender: TObject);
var pomoc,nowy : wskaznik;
      gra: string;
      magazyn : string;
      premiera : integer;

begin
    gra:=Edit1.Text;
    magazyn:=Edit2.Text;
    premiera:=strtoint(Edit3.Text);
    if poczatek=nil then
        begin
          new(poczatek);
          poczatek^.gry:=gra;
          poczatek^.magazyn:=magazyn;
          poczatek^.premiera:=premiera;
          poczatek^.poprz:=nil;
          poczatek^.nast:=nil;
          pomoc:=poczatek;
          fil:=poczatek;
        end
        else
         begin
           new(nowy);
           nowy^.gry:=gra;
           nowy^.magazyn:=magazyn;
           nowy^.premiera:=premiera;
           nowy^.poprz:=pomoc;
           nowy^.nast:=nil;
           fil^.nast:=nowy;
           fil:=nowy;
           koniec:=nowy;
         end;
         ListBox1.AddItem(pomoc^.gry+','+pomoc^.magazyn','pomoc+^.magazyn';);
         ShowMessage('Dodano.');
end;

procedure TForm1.Button2Click(Sender: TObject);
const
  Foo = 'Blad ziomek.';
var
  S : TStrings;
  i : Integer;
begin
  S := TStringList.Create;
  ExtractStrings([' '], [], Foo, S);

  for I := 0 to S.Count -1 do
    Memo2.Lines.Add(S[i]);

  S.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var pomoc:wskaznik;
 i:integer;
  begin
    if poczatek=nil  then
    begin
    Memo1.Clear;
    Memo1.Text:='Pusto. Dodaj cos.';
    end
    else
    begin
    Memo1.Clear;
    Memo1.Text:='Lista elementow : ';
    pomoc:=poczatek;
    i:=1;
    while pomoc<>nil do
      begin
        Memo1.Lines.Add('#'+inttostr(i)+'element zawiera literkę: '+pomoc^.gry+' '+pomoc^.magazyn+' ('+inttostr(pomoc^.premiera)+')');
        pomoc:=pomoc^.nast;
        i:=i+1;
      end;
      end;

  end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#8, '0'..'9']) then
  begin
    ShowMessage('Invalid key');
    
    Key := #0;
  end;
end;

procedure TForm1.Nowabaza1Click(Sender: TObject);
begin
SaveDialog1.Execute;

end;

procedure TForm1.Button4Click(Sender: TObject);
var
  TF : TextFile;
  S : String;
begin
  AssignFile(TF, 'D:\plik.txt');
  try
    Reset(TF);

    while not Eof(TF) do
    begin
      Readln(TF, S);
      Memo3.Lines.Add(S);
    end;
  finally
    CloseFile(TF);
  end;
end;

procedure TForm1.Zapiszbaze1Click(Sender: TObject);
begin
 AssignFile(TF, 'D:\plik.txt');
  try
    Append(TF);
    Writeln(TF, 'a');
  finally
  CloseFile(TF);
  end;
end;

end.

dodanie obrazka do załączników i treści posta - @furious programming

3

Przyjrzyj się w którym miejscu psuje się kolorowanie kodu.

0

Tak czy inaczej nadal mam błąd:

[Error] abc.pas(122): Missing operator or semicolon
[Error] abc.pas(122): Incompatible types
[Fatal Error] Project2.dpr(6): Could not compile used unit 'abc.pas'
unit abc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Plik1: TMenuItem;
    Otwrzbaze1: TMenuItem;
    Zapiszbaze1: TMenuItem;
    Zamknij1: TMenuItem;
    Wyj1: TMenuItem;
    Pomoc1: TMenuItem;
    O1: TMenuItem;
    OpenDialog1: TOpenDialog;
    Nowabaza1: TMenuItem;
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    SaveDialog1: TSaveDialog;
    Button4: TButton;
    Memo3: TMemo;
    ListBox1: TListBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure O1Click(Sender: TObject);
    procedure Otwrzbaze1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Nowabaza1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Zapiszbaze1Click(Sender: TObject);
    //procedure FormCreate(Sender: TObject);
    //procedure ListBox1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
  wskaznik = ^element;
       element = record
                   gry : string;
                   magazyn : string;
                   premiera : integer;
                   nast : wskaznik;
                   poprz : wskaznik;
                 end;

var
  Form1: TForm1;
  poczatek : wskaznik;
  fil : wskaznik;
  prev : wskaznik;
  next : wskaznik;
  pp : string;
  ruch : wskaznik;
  koniec : wskaznik;
  TF : TextFile;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.O1Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;

procedure TForm1.Otwrzbaze1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;

procedure TForm1.Button1Click(Sender: TObject);
var pomoc,nowy : wskaznik;
      gra: string;
      magazyn : string;
      premiera : integer;

begin
    gra:=Edit1.Text;
    magazyn:=Edit2.Text;
    premiera:=strtoint(Edit3.Text);
    if poczatek=nil then
        begin
          new(poczatek);
          poczatek^.gry:=gra;
          poczatek^.magazyn:=magazyn;
          poczatek^.premiera:=premiera;
          poczatek^.poprz:=nil;
          poczatek^.nast:=nil;
          pomoc:=poczatek;
          fil:=poczatek;
        end
        else
         begin
           new(nowy);
           nowy^.gry:=gra;
           nowy^.magazyn:=magazyn;
           nowy^.premiera:=premiera;
           nowy^.poprz:=pomoc;
           nowy^.nast:=nil;
           fil^.nast:=nowy;
           fil:=nowy;
           koniec:=nowy;
         end;
         ListBox1.AddItem(pomoc^.gry+','+pomoc^.magazyn','pomoc+^.magazyn'');
         ShowMessage('Dodano.');
end;

procedure TForm1.Button2Click(Sender: TObject);
const
  Foo = 'Blad ziomek.';
var
  S : TStrings;
  i : Integer;
begin
  S := TStringList.Create;
  ExtractStrings([' '], [], Foo, S);

  for I := 0 to S.Count -1 do
    Memo2.Lines.Add(S[i]);

  S.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var pomoc:wskaznik;
 i:integer;
  begin
    if poczatek=nil  then
    begin
    Memo1.Clear;
    Memo1.Text:='Pusto. Dodaj cos.';
    end
    else
    begin
    Memo1.Clear;
    Memo1.Text:='Lista elementow : ';
    pomoc:=poczatek;
    i:=1;
    while pomoc<>nil do
      begin
        Memo1.Lines.Add('#'+inttostr(i)+'element zawiera literkę: '+pomoc^.gry+' '+pomoc^.magazyn+' ('+inttostr(pomoc^.premiera)+')');
        pomoc:=pomoc^.nast;
        i:=i+1;
      end;
      end;

  end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#8, '0'..'9']) then
  begin
    ShowMessage('Invalid key');
    
    Key := #0;
  end;
end;

procedure TForm1.Nowabaza1Click(Sender: TObject);
begin
SaveDialog1.Execute;

end;

procedure TForm1.Button4Click(Sender: TObject);
var
  TF : TextFile;
  S : String;
begin
  AssignFile(TF, 'D:\plik.txt');
  try
    Reset(TF);

    while not Eof(TF) do
    begin
      Readln(TF, S);
      Memo3.Lines.Add(S);
    end;
  finally
    CloseFile(TF);
  end;
end;

procedure TForm1.Zapiszbaze1Click(Sender: TObject);
begin
 AssignFile(TF, 'D:\plik.txt');
  try
    Append(TF);
    Writeln(TF, 'a');
  finally
  CloseFile(TF);
  end;
end;

end.

dodanie znacznika <code class="none"> - @furious programming

1

Sorry, ale jakiś nieogarnięty jesteś. Przecież masz w nawiasie numer linijki z błędem. Linia 122 to:

ListBox1.AddItem(pomoc^.gry+','+pomoc^.magazyn','pomoc+^.magazyn'');

Błędy widać tutaj, jak na dłoni. Popraw je i powinno się skompilowac. Czy będzie działać tego już nie analizowałem. To Twoje zadanie.

1

Podpowiem tyle, że wymieniona błędna linijka powinna wyglądać tak (aby się przynajmniej kompilowało):

ListBox1.AddItem(pomoc^.gry + ',' + pomoc^.magazyn + ',' + pomoc^.magazyn);

a żeby miało sens, to tak:

ListBox1.AddItem(pomoc^.gry + ',' + pomoc^.magazyn);

bo raczej dwóch łańcuchów z pola magazyn nie potrzebujesz; A jeśli potrzebujesz, to patrz na poprzedni przykład; Inna rzecz to to, że w przypadku budowania łańcuchów z wielu członów, czytelniej jest skorzystać z funkcji Format (na szybkości też można zyskać); Przykład z użyciem tej funkcji:

ListBox1.AddItem(Format('%s,%s', [pomoc^.gry, pomoc^.magazyn]));

1 użytkowników online, w tym zalogowanych: 0, gości: 1