AGB  ·  Datenschutz  ·  Impressum  







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

Überladene Funktion wird nicht erkannt

Ein Thema von BlackSeven · begonnen am 27. Feb 2013 · letzter Beitrag vom 27. Feb 2013
Antwort Antwort
BlackSeven

Registriert seit: 25. Sep 2004
79 Beiträge
 
Delphi XE7 Professional
 
#1

Überladene Funktion wird nicht erkannt

  Alt 27. Feb 2013, 15:59
Hallo!

Folgender Code schlägt mit dem Compiler-Error "[DCC Error] Task.dpr(46): E2250 There is no overloaded version of 'CreateTask' that can be called with these arguments" fehl:
Delphi-Quellcode:
program Task;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type

  ITask = interface
    ['{45C4232F-EA00-4096-88F9-6DD78AD0CB0C}']
  end;

  TAdapterTask = class(TInterfacedObject, ITask)
  end;

  TTask = class(TAdapterTask)
  end;

  TTaskDelegate = reference to procedure(const ATask: ITask);

  TTestTask = class(TTask)
  end;

  Threading = class
  public
    class function CreateTask(const ATask: ITask): ITask; overload;
    class function CreateTask(const ATask: TTaskDelegate): ITask; overload;
  end;

class function Threading.CreateTask(const ATask: ITask): ITask;
begin
end;

class function Threading.CreateTask(const ATask: TTaskDelegate): ITask;
begin
end;

var
  T: ITask;

begin

// T := TTestTask.Create;
  Threading.CreateTask(TTestTask.Create);

end.
Eigentlich wollte ich mir die Zeile mit "T := TTestTask.Create;" sparen und eine neue Funktion einführen.
Kommentiere ich die 2. Funktion "CreateTask(const ATask: TTaskDelegate)" aus, funktioniert es wie erwartet.

Gibt es einen Workaround, um das ganze Problem zu umgehen?
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Überladene Funktion wird nicht erkannt

  Alt 27. Feb 2013, 16:11
Threading.CreateTask(TTestTask.Create as ITask);

P.S.:
Anonyme Methoden basieren intern ebenfalls auf TInterfacedObject und werden deshalb als Interface behandelt. Deshalb muß in Deinem Fall der Compiler etwas unterstützt werden, indem ihm gesagt wird, welches Interface und damit welche Methode gemeint ist.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (27. Feb 2013 um 16:19 Uhr)
  Mit Zitat antworten Zitat
BlackSeven

Registriert seit: 25. Sep 2004
79 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Überladene Funktion wird nicht erkannt

  Alt 27. Feb 2013, 16:42
P.S.:
Anonyme Methoden basieren intern ebenfalls auf TInterfacedObject und werden deshalb als Interface behandelt.
Das ist mir bekannt. Ich dachte, der Compiler wäre so schlau, und würde hier eine Unterscheidung machen.
Wenn nicht, dann müsste die Fehlermeldung "E2251: Ambiguous overloaded call to '%s'..." kommen.

Trotzdem danke!
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Überladene Funktion wird nicht erkannt

  Alt 27. Feb 2013, 17:02
Zitat:
Trotzdem danke!
Gern geschehen. Ich kann aber nichts dafür - ich habe den Compiler nicht geschrieben...
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:34 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