Toon posts:

[Delphi] Probleempje met een klasse

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleempje met een delphi projectje waar ik mee bezig ben, namelijk met het gebruiken van private/public variabelen in een klasse... Hier is een stukje code, om ff het een en ander wat duidelijker te maken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
unit Unit2;

interface

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

type Tlayer1 = class
  private
   server : integer;
  public
    constructor init;
    function show : integer;
end;

implementation

constructor Tlayer1.init;
begin
//inherited;       deze heb ik geprobeerd, hielp niet.
//inherited create;  deze ook niet...
server := 0;
end;

function TLayer1.show : integer;
begin
server := 5;
result := server;
end;
end.

en als ik dit uitvoer, en de functie 'show' wil uitvoeren dan krijg ik dus een acces violation error in de constructor, op de variabele 'server' ...

weet iemand wat ik fout doe? ik heb namelijk geen id...
mgoed de oplossing zal vast wel simpel zijn, maar ik zie het niet.. }:O

  • whoami
  • Registratie: December 2000
  • Laatst online: 08:43
Creeër je een instance van die klasse waar je je functie op uitvoert?

https://fgheysels.github.io/


  • paerad
  • Registratie: Juni 2001
  • Laatst online: 04-11-2025
testlayer:=TLayer1.create;
i:=testlayer.show;
testlayer.free;

zoiets toch?!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

volgens mij is in Delphi een constructor gedeclareerd als:

constructor Create (als dan niet override)

dan kun je 'm ook overerven...

zal best anders kunnen, maar is iig de gewoonte en anders krijg je geduvel bij het aanroepen denk ik...

daar ligt de fout ook aan...

Cogito Ergo Credo


Verwijderd

Topicstarter
nav whoami
Jah,dat werkt ook wel allemaal, er staan nog wat andere procedures in het programma wat ik heb, maar die staan niet in het voorbeeldje hier, maar dat werkt allemaal prima,
heb dus eigenlijk alleen problemen met het bereiken van die variabele....

kep het nu ook met create geprobeerd, dat werkt ook niet..
:'( met override ook niet echt..

tjeez.. kep afgelopen half jaar net les gehad in object georienteerd programmeren, met classes enzo, en nu lukt me dit niet.. niet genoeg opgelet zeker....

  • whoami
  • Registratie: December 2000
  • Laatst online: 08:43
Heb je al eens gedebugged?
Weet je precies op welke regel je die foutmelding krijgt?
probeer het eens zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type
  TLayer1 = class (TObject)
  private
    Server   : Integer;
  public
    constructor Create; override;
    function    Show(); Integer;
  end;

constructor TLayer1.Create;
begin
  inherited;
  Server := 0;
end;

function TLayer1.Show() : Integer;
begin
  Server := 5;
  Result := Server;
end;


code:
1
2
3
4
5
6
var
  MyLayer  : TLayer1;
begin
  MyLayer := TLayer1.Create();
  MyLayer.Show();
end;

Een beetje zoals jopiek zegt dus...

https://fgheysels.github.io/


Verwijderd

Vraagje:

Waarom spring je bij die functie niet in?
(Niet dat het hier aan ligt ofzo):)

Verwijderd

Topicstarter
Op woensdag 19 juni 2002 14:22 schreef whoami het volgende:
...
dan krijg ik een foutmelding dat ik geen statische methode mag overriden...


trouwens dat inspringen, dat ligt aan mijn slechte programmeer manieren... vooral als ik snel iets tiep, spring ik nooit in... foei mij :)

Verwijderd

Zie het misschien al.

Word er wel een variabele van TLayer1 gecreeerd??:?
zoiets als:

var
Layer: TLayer1;
begin
Layer:=Tlayer1.Init;
......

  • whoami
  • Registratie: December 2000
  • Laatst online: 08:43
Op woensdag 19 juni 2002 14:31 schreef hioxz het volgende:

[..]

dan krijg ik een foutmelding dat ik geen statische methode mag overriden...
Dan laat je die override weg bij de constructor.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Yes kep het werken... zoals whoami zei... alleen dan geen override op de constructor :)


Jippie, ik ben u allen zeer dankbaar! :Y)


zit er al zoon pooos mee te klooien, en nu werkt het eindelijk... jippie!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Zo werkt ie bij mij in D6 Ent. prima:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
type
  TLayer1 = class (TObject)
  private
    Server   : Integer;
  public
    constructor Create; //override;
    function    Show : Integer;
  end;
constructor TLayer1.Create;
begin
  inherited;
  Server := 0;
end;

function TLayer1.Show() : Integer;
begin
  Server := 5;
  Result := Server;
end;


aanroep:

var
  MyLayer  : TLayer1;
begin
  MyLayer := TLayer1.Create();
  MyLayer.Show();
end;

trouwens:

To make a method virtual or dynamic, include the virtual or dynamic directive in its declaration. Virtual and dynamic methods, unlike static methods, can be overridden in descendant classes. When an overridden method is called, the actual (runtime) type of the class or object used in the method callnot the declared type of the variabledetermines which implementation to activate.
To override a method, redeclare it with the override directive. An override declaration must match the ancestor declaration in the order and type of its parameters and in its result type (if any).

In the following example, the Draw method declared in TFigure is overridden in two descendant classes.

je zou 'm dus wel dynamic kunnen declareren...

Cogito Ergo Credo


  • whoami
  • Registratie: December 2000
  • Laatst online: 08:43
Op woensdag 19 juni 2002 14:26 schreef NobODy2000 het volgende:
Vraagje:

Waarom spring je bij die functie niet in?
(Niet dat het hier aan ligt ofzo):)
Techposts aan het scoren?
Niet echt een zinnige opmerking, vind je zelf niet :(
Zie het misschien al.

Word er wel een variabele van TLayer1 gecreeerd??:?
zoiets als:

var
Layer: TLayer1;
begin
Layer:=Tlayer1.Init;
......
Misschien eerst even lezen ook...

https://fgheysels.github.io/


Verwijderd

Topicstarter
idd bij mij nu ook... zat hem dus in dat brakke constructen van mij.... :)


kan ik eindelijk verder met mijn mooie programmeer projectje, maar dat later, want ik moet nu eerst autorijlessen.... *help :P

iig nogmaals bedankt! ik was er alleen nooit uitgekomen...
Pagina: 1