Avatar billede spykiller Nybegynder
09. december 2003 - 21:53 Der er 7 kommentarer og
2 løsninger

Ny i Class

Hvorfor virker det her ikke?

unit Unit1;

interface

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

type
  adressebog = class
    navn,tlf : string;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  adressebog1: array[1..10000] of adressebog;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

  adressebog1[0].navn := 'jens';
  adressebog1[0].tlf := '47 33 88 99';

end;

end.
Avatar billede Slettet bruger
09. december 2003 - 22:03 #1
Enten skal du bruge record:

type
  adressebog = record
    navn,tlf : string;
  end;

eller skal du "oprette" klassen før:

procedure TForm1.FormCreate(Sender: TObject);
begin
  adressebog1 := adressebog.Create;
  adressebog1[0].navn := 'jens';
  adressebog1[0].tlf := '47 33 88 99';

end;
Avatar billede tauron Nybegynder
09. december 2003 - 22:05 #2
Det virker ikke, fordi du ikke har skabt nogle objekter af typen adressebog- og fordi du får indexfejl da arrayet er deklareret fra 1 og ikke 0.

I dit eksempel vil det virke, hvis du f.eks. skriver:

  if adressebog[0]=NIL then adressebog[0] := adressebog.create;

før du tildeler felterne værdi.
Avatar billede spykiller Nybegynder
09. december 2003 - 22:10 #3
Det virker ikke...



unit Unit1;

interface

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

type
  adressebog = class
    navn,tlf : string;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  adressebog1: array[1..10000] of adressebog;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

  adressebog1 := adressebog.Create;
  adressebog1[0].navn := 'jens';
  adressebog1[0].tlf := '47 33 88 99';

end;

end.
Avatar billede spykiller Nybegynder
09. december 2003 - 22:13 #4
[Error] Unit1.pas(34): Array type required



unit Unit1;

interface

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

type
  adressebog = class
    navn,tlf : string;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  adressebog1: array[1..10000] of adressebog;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

  if adressebog[0]=NIL then adressebog[0] := adressebog.create;
  adressebog1[0].navn := 'jens';
  adressebog1[0].tlf := '47 33 88 99';

end;

end.
Avatar billede Slettet bruger
09. december 2003 - 22:15 #5
Det er fordi du starter din array ved 1, altså det skal se sådan ud:

  if adressebog1[1] =NIL then adressebog1[1] := adressebog.create;
  adressebog1[1].navn := 'jens';
  adressebog1[1].tlf := '47 33 88 99';
Avatar billede Slettet bruger
09. december 2003 - 22:16 #6
Ellers kan du også gøre det med record, hvis det kun er navn og tlf der skal være i klassen, så slipper du for at "oprette" klassen.
Avatar billede spykiller Nybegynder
09. december 2003 - 22:32 #7
Stadigvæk

[Error] Unit1.pas(34): Array type required


unit Unit1;

interface

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

type
  adressebog = class
    navn,tlf : string;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  adressebog1: array[1..10000] of adressebog;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

  if adressebog[1]=NIL then adressebog[1] := adressebog.create;
  adressebog1[1].navn := 'jens';
  adressebog1[1].tlf := '47 33 88 99';

end;

end.


Prøver lige den anden løsning
Avatar billede Slettet bruger
09. december 2003 - 22:35 #8
Du har skrevet adressebog istedet for adressebog1 nogle steder... Det her virker ved mig :):

  if adressebog1[1]=NIL then adressebog1[1] := adressebog.create;
  adressebog1[1].navn := 'jens';
  adressebog1[1].tlf := '47 33 88 99';
Avatar billede spykiller Nybegynder
09. december 2003 - 22:49 #9
30 til hver...

tak for kampen... *smiler*
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