![]() |
Overload function
Hallo zusammen,
ich sehe gerade den Wald vor lauter Bäumen nicht mehr. Wo mache ich in diesem Beispiel den Fehler ?
Delphi-Quellcode:
Die beiden Klassen TPage und TGroup sind von TPersistent abgeleitet.
THauptklasse = class(TComponent)
private public function Post(const Msg, Link, Image: string): string; overload; function Post(const Msg, Link, Image: string; Page: TPage): string; overload; function Post(const Msg, Link, Image: string; Group: TGroup): string; overload; published end; {...} function THauptklasse.Post(const Msg, Link, Image: string): string; begin Post(Msg, Link, Image, nil); //<<--- Fehler end; function THauptklasse.Post(const Msg, Link, Image: string; Page: TPage): string; begin { To do something } end; function THauptklasse.Post(const Msg, Link, Image: string; Group: TGroup): string; begin { To do something } end; Wenn ich jetzt kompiliere bekomme ich den Fehler: Zitat:
|
AW: Overload function
Wie soll der Compiler bei
Delphi-Quellcode:
denn auflösen, welche Methode er nehmen soll? :stupid:
nil
PS: Das ist mit Ambiguous gemeint ;) |
AW: Overload function
Ok, leuchtet ein bisschen ein. Nur was müsste ich machen, dass er bei nil oder bei einer TPage-Klasse immer die Funktion mit TPage nimmt und wenn ich beim Aufruf ein TGroup angebe soll er die andere Funktion nehmen ?
Oder kann ich das gar nicht über eine überladene Funktion regeln ? Ich tue mich immer noch schwer damit. |
AW: Overload function
Überrgib eine typisierte Konstante
|
AW: Overload function
Wie sollen mir hier typisierte Konstanten weiterhelfen ? Könntest Du das bitte ein bisschen ausführlicher erklären.
|
AW: Overload function
Na wenn das typisiert ist, dann weiß der Compiler ja, daß es TPage sein soll. :zwinker:
Oder typisiere das Nil.
Delphi-Quellcode:
Post(Msg, Link, Image, TPage(nil));
Oder deklariere die Überladungen so, daß es keine derartigen Probleme gibt. Bei TPage nimmt er ja schon TPage, aber NIL passt nunmal auch zu TGroup, also kann man es nirgends sicher zuordnen. |
AW: Overload function
Delphi-Quellcode:
als Parameter sollte auch gehen in neueren delphi Versionen.
Default(TPage)
|
AW: Overload function
Hallo zusammen,
ich bedanke mich erstmal für die zahlreichen Antworten. Ich glaube so langsam kapiere ich es. Das Thema ist nicht gerade mein Steckenpferd. Die Variante von himitsu kann ich jetzt ohne Fehler kompilieren. Das hilft mir erstmal weiter, Danke. |
AW: Overload function
Zitat:
nur eben mit einer impliziten Konstante.
Delphi-Quellcode:
Das Default nutze ich eher für das, wo es her kommt, also in einer generischen Methode.
const
NoPage: TPage = nil; Post(Msg, Link, Image, NoPage); Denn so ist es ein bissl ungewohnt und nicht direkt als 0/nil zu erkennen. |
AW: Overload function
Andere Idee:
Was ist eigentlich so toll an überladenen Funktionen? Wieso nicht einfach:
Delphi-Quellcode:
Ist für mich mindestens genauso verständlich.
THauptklasse = class(TComponent)
private public function Post(const Msg, Link, Image: string): string; overload; function PostPage(const Msg, Link, Image: string; Page: TPage): string; function PostGroup(const Msg, Link, Image: string; Group: TGroup): string; published end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
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