AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Overload function

Ein Thema von RWarnecke · begonnen am 20. Nov 2013 · letzter Beitrag vom 23. Nov 2013
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Overload function

  Alt 20. Nov 2013, 17:52
Hallo zusammen,

ich sehe gerade den Wald vor lauter Bäumen nicht mehr. Wo mache ich in diesem Beispiel den Fehler ?
Delphi-Quellcode:
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;
Die beiden Klassen TPage und TGroup sind von TPersistent abgeleitet.

Wenn ich jetzt kompiliere bekomme ich den Fehler:
Zitat:
[dcc32 Error] Testklassen.pas(842): E2251 Ambiguous overloaded call to 'Post'
Nehme ich jetzt eine der beiden Funktionen mit TPage oder TGroup raus ist der Fehler weg.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Overload function

  Alt 20. Nov 2013, 17:55
Wie soll der Compiler bei nil denn auflösen, welche Methode er nehmen soll?

PS: Das ist mit Ambiguous gemeint
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (20. Nov 2013 um 18:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Overload function

  Alt 20. Nov 2013, 18:02
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.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (20. Nov 2013 um 18:06 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Overload function

  Alt 20. Nov 2013, 18:15
Überrgib eine typisierte Konstante
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

AW: Overload function

  Alt 20. Nov 2013, 18:22
Wie sollen mir hier typisierte Konstanten weiterhelfen ? Könntest Du das bitte ein bisschen ausführlicher erklären.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: Overload function

  Alt 20. Nov 2013, 18:26
Na wenn das typisiert ist, dann weiß der Compiler ja, daß es TPage sein soll.

Oder typisiere das Nil.
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (20. Nov 2013 um 18:31 Uhr)
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#7

AW: Overload function

  Alt 20. Nov 2013, 18:46
Default(TPage) als Parameter sollte auch gehen in neueren delphi Versionen.
Lars
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

AW: Overload function

  Alt 20. Nov 2013, 19:35
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

AW: Overload function

  Alt 20. Nov 2013, 19:44
Die Variante von himitsu kann ich jetzt ohne Fehler kompilieren.
Das ist im Prinzip die selbe Variante, wie von mkinzler beschrieben,
nur eben mit einer impliziten Konstante.

Delphi-Quellcode:
const
  NoPage: TPage = nil;

Post(Msg, Link, Image, NoPage);
Das Default nutze ich eher für das, wo es her kommt, also in einer generischen Methode.
Denn so ist es ein bissl ungewohnt und nicht direkt als 0/nil zu erkennen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Overload function

  Alt 20. Nov 2013, 20:06
Andere Idee:
Was ist eigentlich so toll an überladenen Funktionen?
Wieso nicht einfach:
Delphi-Quellcode:
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;
Ist für mich mindestens genauso verständlich.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz