Avatar billede esben_pape Nybegynder
16. marts 2003 - 12:48 Der er 1 løsning

Class i array laver access violation

Jeg leger med classes i øjeblikket... jeg har nu lavet et array [1..5] of TLastvogn, som er en class. Men når jeg bruger en for-løkke i FormCreate'n laver den en access violation. Kode:

MainU:
---------------------------------------------

unit MainU;

interface

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

const
  AntalBiler = 5;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    SpinEdit1: TSpinEdit;
    Label3: TLabel;
    Edit1: TSpinEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Lastvogn : TLastvogn;
  Lastbiler : array [1..AntalBiler] of TLastvogn;
  AktuelLastvogn : Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  Lastvogn := TLastvogn.Create;
  Lastvogn := TLastvogn.Create;
  Lastvogn.KasseVaegt := 5;
  AktuelLastvogn := SpinEdit1.Value;

  for i := 1 to AntalBiler do
  begin
    Lastbiler[i].KasseVaegt := 5; // Her laver den en AccessViolation
    Lastbiler[i].AntalKasser := 0;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp : Integer;
begin
  tmp := Edit1.Value;

  Lastvogn.AntalKasser := tmp;

  Label2.Caption := IntToStr(Lastvogn.Vaegt);
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
  AktuelLastvogn := SpinEdit1.Value;
  Edit1.Value := Lastbiler[AktuelLastvogn].AntalKasser;
end;

end.

ClassU:
---------------------------------------------

unit ClassU;

interface

type
  TLastvogn = class(TObject)
    private
      FAntalKasser : Integer;
      FKasseVaegt : Integer;
      function GetVaegt : Integer;
    public
      property AntalKasser : Integer
        read FAntalKasser
        write FAntalKasser;
      property KasseVaegt : Integer
        read FKasseVaegt
        write FKasseVaegt;
      property Vaegt : Integer
        read GetVaegt;
    end;

implementation

function TLastvogn.GetVaegt : Integer;
begin
  Result := KasseVaegt * AntalKasser;
end;

end.
Avatar billede Slettet bruger
16. marts 2003 - 14:35 #1
Prøv at ændre

  for i := 1 to AntalBiler do
  begin
    Lastbiler[i].KasseVaegt := 5; // Her laver den en AccessViolation
    Lastbiler[i].AntalKasser := 0;
  end;

Til
  for i := 1 to AntalBiler do
  begin
    If Not Assigned(Lastbiler[i]) Then
      Lastbiler[i]:=TLastvogn.Create;
    Lastbiler[i].KasseVaegt := 5; // Her laver den en AccessViolation
    Lastbiler[i].AntalKasser := 0;
  end;

Mvh. Simon
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger Entreprise Arkitekt

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET