Autor Beitrag
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Fr 14.11.03 23:36 
Hi,

Hab da ein OOP Problem: Ich deklariere eine Klasse (etwas vereinfacht):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
  test = class(TWincontrol)
  constrctor create (AOwner: TComponent; xalign,yalign : integer);override;

{...}

constrctor create (AOwner: TComponent; xalign,yalign : integer);
begin
  left := xalign;
  top := yalign;
  {...}
end;

Was ich also machen möchte ist folgendes: Ich möchte ein Objekt vom Typ TWincontrol mit einem neuen Konstruktor ausstatten, weil ich diesem Objekt ein paar Werte beim createn mitgeben will. Nämlich die Position an der es erscheinen soll.

Nun bekomme ich die Fehlermeldung:
Zitat:
"Create differs from previous declaration"

Hmmm, na gut. Das ist wohl tatsächlich der Fall, denn in dem Ursprünglichen Konstruktor von create sind ja keine Parameter xalign, oder yalign vorhanden. Soweit ist das für mich noch nachvollziehbar. ABER: In der Ursprünglichen Deklaration von TWincontrol ist der Constructor create als virtual vereinbart.

Warum darf ich ihn trotzdem nicht überschreiben? Oder anders gefragt: Was muss ich machen um einem bestehendem Konstruktor Parameter hinzuzufügen?

Hoffe hab die Frage nich zu doof ausgedrückt...

Catweasel

Moderiert von user profile iconTino: Delphi-& Quote-Tags hinzugefügt

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
UC-Chewie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: Fr 14.11.03 23:46 
Bei nem Konstruktor braucht du override nicht anzugeben.

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Sa 15.11.03 00:26 
Hi,

wenn du eine virtuelle Methode bzw. einen virtuellen Konstruktor überschreibst muss die Parameterliste mit der der Vorfahrklasse übereinstimmen.

Wenn du die Parameterliste erweitern willst musst du ganz einfach einen neuen Konstruktor festlegen ohne die direktive override. Du kannst den Konstruktor auch beliebig benennen. Du kannst dann in diesem Konstruktor immer noch den Konstruktor Create vom Vorfahren aufrufen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
constructor test.Create(AOwner: TComponent; xalign, yalign: integer);
begin
  inherited Create(AOwner)

  //........
end;


MFG

- Ernesto -
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Sa 15.11.03 01:01 
DAnke für den Tipp :D

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Mo 17.11.03 09:46 
Falls Du den Konstruktor genau so wie in der Vorfahrklasse benennen möchtest, empfiehlt es sich die Direktive reintroduce zu verwenden, da ansonsten immer lästige Hinweise angezeigt werden.

barfuesser