Avatar billede thomaspries Nybegynder
03. marts 2003 - 22:25 Der er 5 kommentarer og
1 løsning

object pointer

Jeg har laver en klasse som hedder: Vin

Jeg skal i en anden klasse lave en pointer til et object af klassen Vin -Hvordan gøres det?

Jeg har gjort sådan her:

myPointer: ^Vin

Men min compiler kan ikke li' det!!!
Avatar billede mortrr Praktikant
03. marts 2003 - 22:33 #1
Lav en
type
PVin = ^Vin;
og derefter en
var
myPointer: PVin;
Avatar billede thomaspries Nybegynder
03. marts 2003 - 22:47 #2
[Error] node.pas(9): 'Vin' is not a type identifier
Avatar billede dkn Nybegynder
03. marts 2003 - 22:48 #3
hvad hvis du bare kører en pointer(vin) ?
Avatar billede milandt Nybegynder
03. marts 2003 - 22:49 #4
pointer(&vin)
evt?
Avatar billede borrisholt Novice
04. marts 2003 - 08:28 #5
Det kan jeg da godt forstå at compileren ikke kan lide. Det er også noget vrøvl ...

Lad os statre fra bunden af :

type
  TPlacering = (HosJens, AndetSted);
  TVin = class
  private
    FGodvin: Boolean;
    FPlacering: TPlacering;
    procedure SetGodvin(const Value: Boolean);
    function GetGodvin: Boolean;
    procedure SetPlacering(const Value: TPlacering);
  public
    property Godvin: Boolean read GetGodvin write SetGodvin;
    property Placering: TPlacering read FPlacering write SetPlacering;
  end;

  { TVin }

function TVin.GetGodvin: Boolean;
begin
  Result := FPlacering = HosJens;
end;

procedure TVin.SetGodvin(const Value: Boolean);
begin
  FGodvin := Value;
end;

procedure TVin.SetPlacering(const Value: TPlacering);
begin
  FPlacering := Value;
end;


Så laver du dig en variabel af typen :

procedure TForm1.FormCreate(Sender: TObject);
var
  Vin : TVin;
begin
end;

Du har nu en Object Pointer (en pointer til et object) UANSET om du har kaldt constructoren på den eller ej.

Lad os lave et forsøg :

procedure TForm1.FormCreate(Sender: TObject);
var
  Vin : TVin;
  p : Pointer;
begin
  ShowMessage(IntToStr(SizeOf(Vin)));
  Vin := TVin.Create;
  ShowMessage(IntToStr(SizeOf(Vin)));
  FreeAndNil(vin);
  ShowMessage(IntToStr(SizeOf(Vin)));
  ShowMessage(IntToStr(SizeOf(p)));
end;


Det giver 4 hele vejen ned !

Endnu en indikation på manden nok ikke er helt fuld er det følgende :

procedure TForm1.FormCreate(Sender: TObject);
var
  Vin : TVin;
  p : Pointer;
begin
  Vin := TVin.Create;
  p := vin;
end;


Den æder compileren fint !!!

Så en variabel af en klasse type, i det her tilfælde Vin. Er en pointer !!!


Jens B
Avatar billede borrisholt Novice
24. juni 2003 - 14:47 #6
Blev du klogere ?
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