Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form mit neuem Konstruktor -> Warnung des Compilers (https://www.delphipraxis.net/100141-form-mit-neuem-konstruktor-warnung-des-compilers.html)

Andreas H. 23. Sep 2007 10:25


Form mit neuem Konstruktor -> Warnung des Compilers
 
Hallo,

ich habe für eine Form einen Constructor hinzugefügt.

Delphi-Quellcode:
 
type
  TDocsChildForm = class(TForm)
  //...
  public
    { Public-Deklarationen }
    constructor create(sender:TComponent;QueryInfo:TQueryInfo); overload;
  //...

// Konstruktor mit Query-Info-Übergabe
// ----------------------------------------------------------------------------
constructor TDocsChildForm.create(sender: TComponent; QueryInfo: TQueryInfo);
begin
  // Form erstellen
  inherited create(sender);

  // QueryInfo speicherm
  FQueryInfo:=QueryInfo;
end;
Jetzt kommt immer die Warnung:
Zitat:

[Pascal Warnung] DocsChild.pas(203): W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TCustomForm'
Warum? Der neue Konstruktor hat doch ne andere Signatur. Oder habe ich da was nicht verstanden? :gruebel:

Gruß Andreas

Progman 23. Sep 2007 10:42

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
moin, nimm mal override anstelle von overload, vielleicht ist dann die Warnung weg.

TBx 23. Sep 2007 10:49

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
Zitat:

Zitat von Progman
moin, nimm mal override anstelle von overload, vielleicht ist dann die Warnung weg.

das wird nicht funktionieren, da man nur mit gleicher Signatur ein OVERRIDE verwenden kann

Bernhard Geyer 23. Sep 2007 10:54

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
Ergänz mal auch noch virtual.

Ich würde aber QueryInfo als Property implementieren um nicht dem Designkonzept der VCL entgegen zu arbeiten.

Progman 23. Sep 2007 10:56

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
hm, auf meinem Turbo-Delphi funktioniert es, und notfalls kann man auch noch "reintroduce" dahinter schreiben, das unterdrückt die Compiler-Warnung :???:

Andreas H. 23. Sep 2007 11:08

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
Hallo,

noch ne weitere Info: die Form ist ein MDIChild, deshalb wollte ich die erforderlichen Infos gleich beim Create mitgeben.

Reintroduce möchte ich nicht verwenden, da dann ja der alte Konstruktor nicht mehr erreichbar ist

Und Override geht tatsächlich nicht.

Aber mit anderen Klassen funktioniert das mit dem Overdrive doch, oder?

Bernhard Geyer 23. Sep 2007 11:11

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
Zitat:

Zitat von Progman
hm, auf meinem Turbo-Delphi funktioniert es, und notfalls kann man auch noch "reintroduce" dahinter schreiben, das unterdrückt die Compiler-Warnung :???:

Die Meldung wird nicht "Unterdrückt" sondern es wird einfach die Überschreibungshierarchie "gekappt". hast du nun eine Formular der Basisklasse so wird beim Aufruf nur die letzmalige Überschreibung vor reintroduce aufgerufen.

TBx 23. Sep 2007 11:18

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
Ich würde hier an Deiner Stelle einfach die Möglichkeit nutzen, dass ein Object mehrere Constructors haben kann.
Machs z. B. so:

Delphi-Quellcode:
type
  Tinfo = class end;
  TForm1 = class(TForm)
  private
    fInfo : TInfo;
  public
    constructor CreateInitialized (Owner : TComponent; info : TInfo);
  end;

implementation

constructor TForm1.CreateInitialized(Owner: TComponent; info: TInfo);
begin
  Create (Owner);
  finfo := info;
end;

end.

Andreas H. 23. Sep 2007 11:30

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
OK,

das werde ich wohl so machen.

Allerdings habe ich das mit dem Erstellen von Funktionen/Prozeduren mit gleichem Namen und unterschiedlicher Signatur schon gemacht und habe keine Warnung bekommen. Dann ist das wohl bei Konstruktoren anders, oder?

Muetze1 23. Sep 2007 11:31

Re: Form mit neuem Konstruktor -> Warnung des Compilers
 
Nein. Aber vermutlich waren deine damaligen Methoden nicht virtuell...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz